Django:通过Django表单接受包含多个图像文件的zip文件作为FileField并对其进行操作

时间:2018-03-29 11:51:34

标签: django django-models django-forms django-views django-file-upload

Class X(models.Model):     zip_file = models.FileField()

现在,这个zip_file是一个包含任意数量图像的zip。我希望能够提取所有图像并保存(到DB)相同 X对象,即&#34; < strong>主键&#34;是一样的。

据我所知,文件存储在系统中,只有参考文件存储在数据库中,我很好。

  

我不确定解压缩文件的最佳做法是什么   服务器并将它们逐个保存到数据库中。

我有一个天真的想法是使用&#34; 验证器&#34;检查文件并将其保存到数据库,但不确定这是否是最佳做法。

感谢任何帮助或建议。 :)

1 个答案:

答案 0 :(得分:0)

根据zip文件中的图像要求和数量,有几种不同的方法可以解决这个问题。我将做出以下假设:

  1. 您想保留zip文件
  2. 每个zip文件中都有任意数量的图像文件
  3. 在这种情况下,您可以按如下方式设置模型格式。完成文件上载过程后,您可以触发信号或后台任务来解析zip文件,并为每个图像文件创建一个通过外键与zip文件相关的单独对象。这样您就可以轻松获取所有文件,而无需创建大量图像字段。

    [models.py]

    class X(models.Model):
        zip_file = models.FileField()
    
    class XImages(models.Model):
         image = models.ImageField()
         x = models.ForeignKey(X)
    

    如果您实际上并不关心保留zip文件,那么您可以执行类似的操作,但不是将对象保存在表单帖子上,您可以简单地将其提取出来,然后将图像保存在单独的课程。

    如果每个zip文件中有静态数量的图像,那么您只需在模型本身中创建特定数量的ImageField即可。