“上传”从Django的外壳文件(“Upload” a file from django shell

2019-06-28 00:11发布

我需要从一个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。

Answer 1:

最后,我找到了答案。

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()


Answer 2:

如果使用Python 3一个调节是需要的-变化为“r”至“RB”:

f = File(open(os.path.join(IMPORT_DIR, 'fotos', photo), 'rb'))


文章来源: “Upload” a file from django shell