문제

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을 만드는 방법입니다.

도움이 되었습니까?

해결책

마침내 나는 대답을 찾았다.

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

다른 팁

사용하는 경우 파이썬 3 하나의 조정이 필요합니다 - 'r'을 'rb'로 변경합니다.

f = File(open(os.path.join(IMPORT_DIR, 'fotos', photo), 'rb'))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top