2015-02-23 42 views
10

我在django 1.8 alpha版中使用django.contrib.postgres.fields.ArrayField并尝试在文件字段中使用它。如何在djangos数组字段中存储文件

下面是一个虚构的论坛一个帖子:

# coding=utf-8 
from backend.core.models import Team 
from django.contrib.postgres.fields import ArrayField 
from django.db import models 
from django.db.models import FileField 


class Post(models.Model): 

    title = models.CharField(max_length=256) 
    content = models.TextField() 

    team = models.ForeignKey(Team, related_name='posts') 

    attachments = ArrayField(FileField(), null=True) 

    def __str__(self): 
     return self.title 

的迁移工作,一切都在寻找伟大。

但是:Django Admin不支持该字段。

我将如何在代码中实现该功能,如何将新文件存储/添加到此数组字段并将其存储在数据库中?

回答

4

目前,我认为django.contrib.postgres.fields.ArrayField正在积极开发中。该django.contrib包是new to django 1.8(它仍处于测试阶段),所以我认为这个功能还为时过早。

您所看到的文本字段应该是保存在数组中的分隔字符串。这对于FileFields数组有点合理,因为FileField保存了一个URL字符串,而不是该文件的blob(据我所知)。

一个\d table给出了该列的表信息如下:

arrayexample=# \d example_post 
Column  | Type      | Modifiers 
-------------------------------------------------- 
attachments | character varying(100)[] | 

目前从here创建你所看到现场的管理。注意它继承forms.CharFieldFileField使用forms.ClearableFileInput

我不认为你正在寻找的功能目前存在于Django中,但我认为它的构建是可行的。就我个人而言,我会通过对现有的ArrayField进行分类并覆盖formfield以使用我的自定义form_class来更好地处理FileFieldArray s来构建它。

我希望这可以帮助,我也看不到这个功能的任何打开的拉请求。

+0

希望得到另一个答案,但足够公平。 – shredding 2015-02-27 09:17:45

0

您应该使用FileField.storage来处理文件的存储和检索。欲了解更多详情,请参阅Django的文档Managing Files

+0

我试过这样的:https://dpaste.de/Lpbb 存储确实工作,它甚至上传到s3,但是,棘手的部分是:如何将此注入到数组字段? – shredding 2015-02-26 14:59:39