Excelファイルと画像のあるフォルダーからデータをインポートする必要があります。Excelのすべての行にすべてのエントリが記述され、フォルダー内のファイル名のリストがあります(エントリに関連する写真)。
データベース内のすべてのエントリを作成し、それをdjangoシェルを介して保存するスクリプトを実行しましたが、InMemoryUploadedFileをインスタンス化してモデルと一緒に保存する方法がわかりません。
django 1.0では、必要なことを実行できるこの小さなクラスがありましたが、django 1.1での変更により、機能しなくなりました。
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()
このクラスをこのコードで使用して、画像をロードし、モデルインスタンスで保存していました。
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()
問題は、PythonのファイルからInMemoryUploadedFileまたはTemporaryUploadedFileを作成する方法、またはこのコンテキストで機能する可能性のあるその他のものを作成する方法です。