Mein Python-CSV-Import-Skript erstellt jedes Mal einen zusätzlichen leeren Eintrag im Datenbankmodell, wenn ich Daten lade. Ich habe versucht, verschiedene Wege zu arbeiten, aber ich bekomme immer noch einen leeren Eintrag plus die eigentlichen Daten werden von der CSV geladen. Hier ist, was mein Skript ist. Bitte, deine Hilfe wird sehr gut sein.CSV-Import in Django-Modelle
class CsvUploadView(LoginRequiredMixin, FormView):
form_class = CsvAttendeeForm
template_name = 'attendee/upload_attendee_csv.html'
success_url = reverse_lazy('home')
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
file = request.FILES.get('file')
if form.is_valid():
if file:
reader = csv.reader(file, delimiter=',')
next(reader)
attendee_instance = Attendee()
Attendee.objects.bulk_create(
[Attendee(firstname=row[0],
surname=row[1],
email=row[2],
)
for row in reader])
attendee_instance.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
Wow! Vielen Dank, es hat wie ein Zauber funktioniert. Ich habe das Speichern der Instanz entfernt und alles funktioniert. Es sieht so aus, als ob bulk_create das Speichern der erstellten Instanz übernimmt. Tausend Dank. – sonlinux
Glücklich zu helfen - und es tut tatsächlich die Rettung! Es ist erwähnenswert, dass die Einschränkungen der Massenerstellung (https://docs.djangoproject.com/en/1.11/ref/models/querysets/#bulk-create), besonders wenn Sie nicht Postgres verwenden, und Auch wenn Sie an die Verwendung von 'post_save'- und' pre_save'-Signalen kommen. Die [create] (https://docs.djangoproject.com/en/1.11/ref/models/querysets/#create) -Methode * löst diese Sicherungssignale aus, also stellen Sie sicher, dass Sie die für Sie am besten geeignete Methode verwenden Anwendungsfall - Ich habe die Antwort jetzt auch mit diesen aktualisiert. – Withnail
In der Tat, so viel habe ich von Ihrer Berufsberatung gelernt. Eine weitere Sache, im selben Modell habe ich ein Feld namens ** Autor ** und es ist über einen ** ForeignKey ** mit dem Django ** User ** Modell verbunden. Ich wollte den aktuellen Benutzer instanziieren und speichern, der den Upload als Autor macht, aber ich bekomme einen Fehler von etwas wie '' 'Verletzung von Null-Constraints ... nicht erlaubt''', aber das Objekt wird erstellt und der Autor, der das ist Der aktuell angemeldete Benutzer wird in der Datenbank instanziiert. – sonlinux