我觉得我遇到的问题很少见,因为我在这里或谷歌上似乎找不到答案。
我的数据库中存储了一些图片,为了提供这些图片,我想压缩它们,将在数据库中创建的ZipFile存储起来,其中有一个AmazonS3存储作为后端。更重要的是,所有这些操作都是在芹菜管理的后台任务中完成的。现在。。。这是我写的代码:

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

我得到错误:*** AttributeError: 'ZipFile' object has no attribute '_committed'
所以我试着用这种方式将zipfile转换成Django文件:zf = File(zf)但它返回一个空对象。
有人能帮我吗?我有点卡住了。。。

最佳答案

这并不像我想象的那么复杂。(这可以解释为什么没有人在网上问这个问题)
使用Python3.3,字符串是unicode的,主要使用unicode对象。文件需要字节数据才能正常工作,下面是解决方案:

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

10-06 00:45