“上传”从Django的外壳文件
-
22-07-2019 - |
题
我需要从一个excel文件,并用图像的文件夹导入一些数据,在Excel中的每一行描述的每个条目,并有文件夹(与进入照片)。
在文件名列表我做这在数据库中创建的每个条目,并将其保存槽运行Django shell脚本,但我不知道如何来实例化一个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可能在这方面的工作。
解决方案
最后,我找到了答案。
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()
其他提示
如果使用需要的的Python 3 强>一个调节 - 变化为 'r' 至 'RB':
f = File(open(os.path.join(IMPORT_DIR, 'fotos', photo), 'rb'))
不隶属于 StackOverflow