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

shr*_*ing 13 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
Run Code Online (Sandbox Code Playgroud)

迁移工作有效,一切看起来都很棒.

但是:Django Admin不支持此字段.

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

小智 5

目前,我认为django.contrib.postgres.fields.ArrayField正处于积极发展阶段.该django.contrib软件包是django 1.8的新版本(目前仍处于测试阶段),所以我觉得这个功能还为时尚早.

您看到的文本字段是一个分隔的字符串,保存在数组中.它对数组有意义,FileFields因为FileField保存URL字符串而不是文件的blob(据我所知).

A \d table给出了该列的表信息,如下所示:

arrayexample=# \d example_post
Column      | Type                     | Modifiers
--------------------------------------------------
attachments | character varying(100)[] |
Run Code Online (Sandbox Code Playgroud)

目前,您在管理员中看到的字段是从此处创建的.请注意,它forms.CharFieldFileField使用forms.ClearableFileInput时继承.

我不认为您正在寻找的功能目前存在于Django中,但我认为构建它是可行的.就个人而言,我会接近通过继承已有的建筑它ArrayField并重写formfield使用个性化的form_class,以更好地处理一个ArrayFileField秒.

我希望这有帮助,我也没有看到任何打开请求此功能.