Django: Laden Sie eine Datei hoch und lesen Sie ihren Inhalt, um ein Modell zu füllen?

8

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?

    
Thomas 23.05.2011, 01:20
quelle

4 Antworten

1

Ich habe eine andere Möglichkeit gefunden, ein Modell zu füllen, bevor es gespeichert wird.

Anstatt pre_save oder zwei verschiedene Formulare zu verwenden, können wir einfach die Methode save_model () verwenden, wenn wir admin.ModelAdmin verwenden:

%Vor%     
Thomas 04.10.2011, 09:07
quelle
8

Sie können zwei Formulare erstellen:

  1. Ein Formular basierend auf django.forms.Form , mit dem die Datei von der Anfrage
  2. abgerufen wird
  3. Ein Modellformular, mit dem Modellfelder validiert und ein Modellobjekt erstellt werden

Dann können Sie das zweite Formular wie folgt aufrufen:

%Vor%     
Andrey Fedoseev 23.05.2011 03:29
quelle
2

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

    
Konstant 23.05.2011 03:13
quelle
0

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.

    
Torsten Engelbrecht 23.05.2011 03:17
quelle