2016-07-14 10 views
-3

Das ist mein Modell.Wie importiere ich Bilder in django Modelle von csv/excel?

class Product(models.Model) 
    id = models.AutoField(max_length=10, primary_key=True) 
    name = models.CharField(max_length=60) 
    summary = models.TextField(max_length=200) 
    image = models.FileField(upload_to='product_images', blank=True) 

Ich weiß, wie in django Modelldaten aus CSV zu importieren. Aber ich habe auch ein Bildfeld hier.

Kann ich Dateien aus der Methode zum Hinzufügen von Daten zu Modellen aus CSV in Modelle hochladen? Wie?

Ich benutze diese Methode für sie importieren: http://mitchfournier.com/2011/10/11/how-to-import-a-csv-or-tsv-file-into-a-django-model/

Ich habe Bilder in einem Ordner in meinem System gespeichert.

+0

Wie können wir Ihnen antworten, wenn Sie uns nichts darüber gesagt haben, was die CSVs enthalten oder wie Sie sie importieren? –

+0

@DanielRoseman Sie hätten die Antwort gegeben, wenn Sie wissen, wie Sie Bilder in Modelle importieren können. Ich weiß nicht, wie man Bilder importiert, und wie kann ich Ihnen sagen, wie ich sie importiere? Das ist die Frage, nicht wahr? – TheOddAbhi

+0

Nein. Was ist das "Bild" in Ihrer CSV? Ein Dateiname? Eine URL? Eine Base-64-codierte Datenfolge? Sie haben bereits CSVs und Code zum Importieren der Daten, die Sie anzeigen sollten. –

Antwort

1

FileField ist nur ein Verweis auf eine Datei. Es legt keine Datei in die Datenbank, wie manchmal fälschlicherweise angenommen wird.

Angenommen, Sie haben bereits den Code zum Lesen durch die CSV und zum Abrufen des Speicherorts der Datei geschrieben. Dann alles, was Sie tun müssen, ist das Beispiel in FileField.save()

Diese Methode nimmt einen Dateinamen und Dateiinhalte und übergibt sie an die Speicherklasse für das Feld zu befolgen, dann ordnet die gespeicherte Datei mit dem Modellfeld . Wenn Sie Dateidaten manuell mit FileField-Instanzen in Ihrem Modell verknüpfen möchten, wird die Methode save() verwendet, um diese Dateidaten zu beizubehalten.

Nimmt zwei erforderliche Argumente: Name ist der Name der Datei und Inhalt, der ein Objekt ist, das den Inhalt der Datei enthält.

Etwas wie folgt aus:

p = Product() 
p.image.save('name from csv',open('path from csv')) 
+0

Das ist hilfreich. Ich werde implementieren und wenn es funktioniert, werde ich die Antwort auswählen. – TheOddAbhi

+0

Es hat nicht geklappt. Trotzdem danke. Ich habe es gelöst. – TheOddAbhi

0

Ich löste es durch den Namen des Bildes in der csv speichern und einfach den Namen wie dies auf dem Gebiet hochladen:

... 
product.image = "product_images" + namefromcsv 

dann I hat alle Bilder im Medienordner innerhalb product_images hochgeladen.

Und es hat sehr gut funktioniert.

Ich habe versucht, das Bild mit product.image.save() -Option mit File Klasse hochladen, aber es hat nicht für mich funktioniert.