Potrzebuję zaimportować niektóre dane z pliku Excela i folderu z obrazami, każdy wiersz w programie Excel opisuje każdy wpis i ma listę nazw plików w folderze (zdjęcia związane z wpisem)."Prześlij" plik z powłoki django
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 małą klasę, która pozwoliła mi zrobić to, czego potrzebuję, ale ze zmianami w django 1.1 to już 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żywam tej klasy z tym kodem do ładowania obrazów i zapisywania ich za pomocą 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()
Chodzi o to, w jaki sposób mogę utworzyć InMemoryUploadedFile lub TemporaryUploadedFile z pliku w python ?, lub jakiejkolwiek innej rzeczy, która może pracować w tym kontekście.
więc zmieniło się od dokonywania obiekt ImportFile dokonaniem obiekt File? A ImportFile pochodzi z pliku, a nie z pliku? Wygląda na to, że mógłbyś to naprawić, wyprowadzając ImportFile z File, ale nie jestem pewien, co ImportFile dodawał do równania. Z przedstawionego kodu nie wynikało ono z wyspecjalizowanego zachowania. – hughdbrown
Po pierwsze, gdy próbowałem pracować z obiektem pliku django podniósł kilka wyjątków takich jak "f nie ma porcji atrybutów", więc stworzyłem tę klasę i napisałem wszystkie atrybuty potrzebne do pracy. – hchinchilla