Ich bin neu bei Django und würde gerne wissen, was der Django-Weg ist, um Elemente in einer Datenbank hinzuzufügen, nicht indem man jedes Feld aus einem HTML-Formular eingibt (wie es standardmäßig gemacht wird), sondern eine einzelne Datei hochlädt eine JSON-Datei), die zum Auffüllen der Datenbank verwendet wird?
Nehmen wir an, das Modell hat nur drei Felder: Titel, Beschreibung, Menge. Und ich habe eine Textdatei (myFile.txt) mit "myTitle: myDesc" darin geschrieben.
Was ich will, ist nur ein FileField, das eine Textdatei akzeptiert, damit ich myFile.txt hochladen kann und der Titel und die Beschreibung aus dieser Datei gelesen werden. Und zur gleichen Zeit wird die Menge "normal" in einer Texteingabe gefragt, wie es standardmäßig wäre (nur Titel und Beschreibung werden aus der Datei gelesen).
Natürlich wird eine Validierung der Datei durchgeführt, um die hochgeladene Datei zu akzeptieren / abzulehnen. Das Problem, mit dem ich konfrontiert bin, besteht darin, dass die Datei im lokalen Speicher gespeichert wird, wenn ich dem Modell ein FileField hinzufüge. Ich möchte, dass der Inhalt der hochgeladenen Datei gelesen wird, um einen Eintrag im Modell zu erstellen, und anschließend gelöscht wird.
Selbst der Administrator sollte nicht in der Lage sein, manuell ein Element hinzuzufügen, das den Titel und die Beschreibung in ein HTML-Formular eingibt, sondern nur durch Hochladen einer Datei. Kann mir jemand auf Django-Art helfen?
Sie können zwei Formulare erstellen:
django.forms.Form
, mit dem die Datei von der Anfrage Dann können Sie das zweite Formular wie folgt aufrufen:
%Vor% Sie können den Formularassistenten verwenden, um solche Aufgaben zu erledigen. Die Grundidee besteht darin, zwei Formen zu erstellen; eine mit der FileField
und die andere Form mit dem Titel, Beschreibung Menge Felder.
Der Benutzer sieht das Formular zuerst mit FileField
. Sobald der Benutzer die Datei hochlädt und die Anfrage abschickt, können Sie das andere Formular mit den aus der Datei gelesenen Anfangswerten rendern (Sie können auch lösche die Datei bei diesem Schritt.
In Bezug auf die Verwaltungsfunktionalität können Sie lesen, wie Sie den Formularassistenten mit admin integrieren können hier
Um dies zu erreichen, müssen Sie einen benutzerdefinierten Code schreiben. Jedes FileField verfügt über ein verbundenes Dateiobjekt . Sie können den Inhalt dieses Dateiobjekts lesen, als würden Sie mit Dateien in Python umgehen.
Es gibt natürlich verschiedene Orte, an denen Sie das tun könnten. Sie können die Methode zum Speichern von Formularen / Modellen überschreiben, die das FileField enthält. Wenn Sie ein Modell haben, können Sie auch pre_save
/ post_save
Signale verwenden.
Tags und Links django file-upload django-admin