Frage

Ich brauche einige Daten aus einer Excel-Datei und einen Ordner mit Bildern zu importieren, beschreibt jede Zeile in der Excel jeden Eintrag und hat eine Liste von Dateinamen im Ordner (Fotos auf den Eintrag im Zusammenhang).

Ich habe einen Skript getan, die jeden Eintrag in der Datenbank erstellt und speichert es die django Schale Trog, aber ich habe keine Ahnung, wie man einen InMemoryUploadedFile instanziiert es mit dem Modell speichern.

In django 1.0 hatte ich diese kleine Klasse, die mir erlaubt, zu tun, was ich brauche, aber mit Änderungen in django 1.1 es nicht mehr funktioniert.

class ImportFile(file):
    def __init__(self, *args, **kwargs):
        super(ImportFile, self).__init__(*args, **kwargs)
        self._file = self
        self.size = os.path.getsize(self.name)

    def __len__(self):
        return self.size

    def chunks(self, chunk_size=None):
        self._file.seek(0)
        yield self.read()

Ich wurde mit dieser Klasse mit diesem Stück Code Bilder zu laden und sie mit dem Modellinstanz zu speichern.

for photo in photos:
    f = ImportFile(os.path.join(IMPORT_DIR, 'fotos', photo), 'r')
    p = Photo(name=f.name, image=f, parent=supply.supply_ptr)
    name = str(uuid1()) + os.path.splitext(f.name)[1]
    p.image.save(name, f)
    p.save()

Die Frage ist, wie kann ich eine InMemoryUploadedFile oder TemporaryUploadedFile aus einer Datei in Python ?, oder eine andere Sache schaffen, die in diesem Zusammenhang funktionieren könnte.

War es hilfreich?

Lösung

Schließlich fand ich die Antwort.

from django.core.files import File

f = File(open(os.path.join(IMPORT_DIR, 'fotos', photo), 'r'))
p = Photo(name=f.name, image=f, parent=supply.supply_ptr)
name = str(uuid1()) + os.path.splitext(f.name)[1]
p.image.save(name, f)
p.save()

Andere Tipps

Bei der Verwendung von Python 3 eine Anpassung notwendig ist - ändern 'r' 'rb':

f = File(open(os.path.join(IMPORT_DIR, 'fotos', photo), 'rb'))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top