Ich habe ein Django-Modell mit vielen Feldern (ungefähr 24), und anscheinend möchten meine Benutzer Instanzen dieses Objekts mit einem Tabellen-Upload erstellen, anstatt alle Daten manuell einzugeben in Formen.CSV mit Django und csv.DictReader analysieren
Ich habe festgestellt, dass die Verwendung von Pythons integriertem CSV-Modul dies ziemlich einfach machen sollte, aber ich habe eine harte Zeit herauszufinden, wie genau ich es verwenden soll.
Lasst uns beginnen mit dem, was ich in Bezug auf die Code haben:
def upload_file(request):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_files(request.FILES['file'])
return HttpResponseRedirect('/workflow/')
else:
print form.errors
print request.FILES
return HttpResponseRedirect('/workflow/upload')
else:
form = UploadFileForm()
return render(request, 'fileform.html', {'formset': form})
Dies nimmt eine CSV-Datei als Upload, und es Hände handle_files
off mit dem Parsing und die Objekterstellung zu beschäftigen. Dies ist die Methode, mit der ich Probleme habe.
def handle_files(f):
reader = csv.DictReader(f, delimiter=' ', quotechar='|')
... #?
Ich habe versucht, den Python-docs (http://docs.python.org/2/library/csv.html) zu imitieren, aber DictReader ist sehr schlecht dokumentiert. Liefern wir csv.DictReader()
die passenden Argumente? Wenn ich habe, wie bekomme ich die Informationen aus reader
? Ich werde den Benutzern eine Vorlage zur Verfügung stellen, sodass ich davon ausgehen kann, dass jede Spalte der CSV-Datei über vorhersehbare Daten verfügt. Das heißt, ich weiß, dass in Spalte A Daten zu Feld X und Spalte B zu Y usw. gehören. Wie gehe ich vor, um die Daten vom Reader zu analysieren und dann ein Objekt mit diesen Daten zu erstellen?
Ich vermute, es so etwas wie sein: off
for row in reader:
X=row[1]
Y=row[2]
#etc
my_object = MyObject(x=X, y=Y)
my_object.save()
Ist auf diese Weise? Sollte ich einen anderen CSV-Reader verwenden?
Vielen Dank für jede Hilfe, ich weiß, es gibt eine Menge Fragen in diesem Beitrag.
Was ist der Sinn von DictReader dann? –
Die [docs] (http://docs.python.org/2/library/csv.html#csv.DictReader) sagen, dass es "ein Objekt erstellen wird, das wie ein normaler Leser funktioniert, aber die gelesenen Informationen in ein Diktat mappt deren Schlüssel durch den optionalen Parameter fieldnames angegeben werden. Wenn der Parameter fieldnames weggelassen wird, werden die Werte in der ersten Zeile der csvfile als Feldnamen verwendet. " Was klingt wie du wäre in der Lage, Zeile ["Spalte A"] (oder eine andere Taste abhängig von der Spalte Name) –