如何填充和访问Django的ArrayField?

4
为了解决我(比较具体的)问题,我发现需要使用Django ArrayField: https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#arrayfield 在我的models.py文件中定义如下:
Bla = ArrayField(
        models.IntegerField(),
        size=4
        null=True
        )

但是,我该如何实际地添加信息?最好能够添加整个Python列表,也可以在单个位置添加。

一旦信息被添加进去,我应该如何检索它?无论是在Python中还是在.html文件中。

注:我认为问题的整个背景并不重要,所以我现在省略了它,但如果有人感兴趣,我当然会提供所有必要的细节。

1个回答

10

你只需分配一个整数列表。

class M(models.Model):
    bla = ArrayField(models.IntegerField(), size=4, null=True)

m = M.objects.create(bla=[1, 3, 3, 7])

# (or, equivalently,)

m = M()
m.bla = [1, 3, 3, 7]
m.save()

# (or, equivalently,)

m = M(bla=[1, 3, 3, 7])
m.save()

读取m.bla,你将得到一个整数列表,可以像其他列表一样在Python或Django模板中访问。

另请参见有关ArrayFields的各种额外查找的文档


哇,谢谢!我收到了一个新的错误消息,所以这是进步!“Manager isn't accessible via Group instances”(“无法通过Group实例访问Manager”)(真的没有冒犯的意思:D)你真的只是把与我在问题中提供的链接相同的答案放进去了吗? :D 但我保证再看一遍,也许现在我会理解它了。我真的不知道我必须经历整个.objects.create()的麻烦,因为对于我所有的其他字段,我都不需要。我想这是一些内置的魔法^^ - Maxim Moloshenko
不,你不需要通过 .objects.create 进行操作 -- 它只是 m = M(bla=...); m.save(); 的简写罢了。而且这并不是相同的链接,它是关于那些查询的下一节内容。但是让我稍作修改我的回答。 - AKX
这在文档中没有明确说明,有点奇怪。 - Fush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接