无法将空列表保存到 Django ArrayField

ezv*_*ine 7 django postgresql django-models python-3.x django-rest-framework

我有一个 Django 模型

from django.db import models
from django.contrib.postgres.fields import ArrayField


class Website(models.Model):
    id = models.BigAutoField(primary_key=True, verbose_name='ID')
    status = models.BooleanField(default=True)
    meta = ArrayField(base_field=models.CharField(max_length=200, null=True), default=list)

Run Code Online (Sandbox Code Playgroud)

我正在使用以下序列化程序将数据保存到数据库:

class WebsiteConfigSerializer(serializers.ModelSerializer):
    class Meta:
        model = Website
        fields = ('status', 'meta')
Run Code Online (Sandbox Code Playgroud)

当我尝试保存以下数据时,出现错误:

{
    "status": true,
    "meta": []
}

#ERROR:
# "meta : This list may not be empty."
Run Code Online (Sandbox Code Playgroud)

是否无法将空列表保存到ArrayField?当我根本不传递该字段时,存储的值是{NULL}。此外,在初始迁移期间,由于我添加了default值 as list,所以我所有现有条目的“元”值均为{}

如果根本不允许空列表值,那么为什么在初始迁移期间会保存它?

loi*_*ser 11

尝试改变你的模型

from django.db import models
from django.contrib.postgres.fields import ArrayField


class Website(models.Model):
    id = models.BigAutoField(primary_key=True, verbose_name='ID')
    status = models.BooleanField(default=True)
    meta = ArrayField(base_field=models.CharField(max_length=200, null=True), default=list, blank=True)
Run Code Online (Sandbox Code Playgroud)

  • 您对可调用列表的看法是正确的,但您必须更改模型,即“blank=True”。我编辑了我的答案以避免误导人们。 (2认同)