如何在django数组字段中存储文件

时间:2015-02-23 16:05:20

标签: python django postgresql

我正在django 1.8 alpha中使用django.contrib.postgres.fields.ArrayField,并尝试将其与文件字段一起使用。

这是一个虚构论坛中的帖子:

# 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不支持此字段。

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

2 个答案:

答案 0 :(得分:5)

目前,我认为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.CharField使用forms.ClearableFileInput时,它会从FileField继承。

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

我希望这会有所帮助,我也没有看到对此功能的任何公开请求。

答案 1 :(得分:0)

您应该使用FileField.storage来处理文件的存储和检索。有关更多详细信息,请参阅Django关于Managing Files

的文档