2014-02-13 6 views
1

내가 가지고있는 문제는 여기 또는 Google에서 답변을 찾을 수없는 것 같아서 드물다고 생각합니다.
데이터베이스에 여러 그림이 저장되어 있으며이를 처리하기 위해 AmazonS3 저장소가있는 데이터베이스에 생성 된 ZipFile을 백엔드로 저장합니다. 더 나아가서, 이러한 모든 작업은 Celery가 관리하는 백그라운드 작업으로 수행됩니다.
*** AttributeError: 'ZipFile' object has no attribute '_committed' 그래서 나는이 방법을 파일 장고에 ZipFile를 캐스팅하려고 : Django 데이터베이스에 ZipFile 객체 저장

zipname = "{}.zip".format(reporting.title) 

with ZipFile(zipname, 'w') as zf: 
    # Here is the zipfile generation. It quite doesn't matter anyway since this works fine. 
    reporting = Reporting.objects.get(pk=reporting_id) 
    reporting.pictures_archive = zf 
    reporting.save() 

내가 오류 가지고 : 지금 ... 여기에 내가 쓴 코드입니다 zf = File(zf)는하지만 빈 개체를 반환합니다.

아무도 도와 줄 수 있습니까? 나는 달라 붙어서 ...

+0

왜 파일을 db에 저장하려고하는지 잘 모릅니다. 왜 그들을 S3에 직접 저장하지 않고 거기에서 봉사해야합니까? –

+0

s3 저장소가있는 FileField입니다. 따라서 모델을 저장하면 업데이트 된 파일이 s3에서 업데이트됩니다. 그것은 놀라운 과정입니다. 그런데 제 질문을 게시 한 직후에 해결책을 찾았습니다. 최근에 그런 일이 항상 일어나고 있습니다. -_- – Depado

+0

@Depado 해결책을 찾았다면 자신에게 질문에 답해야합니다 (예, 질문에 대답하는 것이 좋습니다). 유일한 제한은 수락하기 전에 24 시간을 기다려야한다는 것입니다. – Bakuriu

답변

1

이것은 내가 생각했던 것만 큼 복잡한 것은 아니었다. (그 이유는 아무도 내가 궁금해하는 인터넷상의 모든 질문을 이유를 설명 할 수있다)
파이썬 3.3을 사용하면 문자열이 유니 코드이고 주로 유니 코드 개체로 작업한다. 파일이 올바르게 작동하려면 바이트 데이터가 필요하므로 여기 해결책이 있습니다.

zipname = "{}.zip".format(reporting.id, reporting.title) 

with ZipFile(zipname, 'w') as zf: 
    # Generating the ZIP ! 

reporting = Reporting.objects.get(pk=reporting_id) 
reporting.pictures_archive.delete() 
reporting.pictures_archive = File(open(zipname, "rb")) 
reporting.save()