„Prześlij” plik z powłoki django
Muszę zaimportować niektóre dane z pliku Excela i folderu z obrazami, każdy wiersz w Excelu opisuje każdy wpis i ma listę nazw plików w folderze (zdjęcia związane z wpisem).
Zrobiłem skrypt, który tworzy każdy wpis w bazie danych i zapisuje go przez powłokę django, ale nie mam pojęcia, jak utworzyć instancję InMemoryUploadedFile, aby zapisać ją w modelu.
W django 1.0 miałem tę małą klasę, która pozwoliła mi zrobić to, czego potrzebuję, ale ze zmianami w django 1.1 nie działa.
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()
Użyłem tej klasy z tym fragmentem kodu do załadowania obrazów i zapisania ich w instancji modelu.
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()
Pytanie brzmi, jak utworzyć plik InMemoryUploadedFile lub TemporaryUploadedFile z pliku w python ?, lub jakiejkolwiek innej rzeczy, która mogłaby działać w tym kontekście.