首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django和django-jsonfield中将JSONField的默认值设置为空列表?

如何在Django和django-jsonfield中将JSONField的默认值设置为空列表?
EN

Stack Overflow用户
提问于 2017-02-15 10:47:04
回答 2查看 23.2K关注 0票数 35

问题

django中将JSONField设置为新列表的默认值的最佳方法是什么

上下文

有一个模型,其中一个字段是一个项目列表。在没有设置项目的情况下,模型应该有一个空列表。

当前解决方案

代码语言:javascript
复制
from django.models import Model

class MyModel(Model):
    the_list_field = JSONField(default=[])

这是最好的方法吗?是否应该改为使用list

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 17:00:48

根据Django documentation for JSONField的说法,您确实应该使用default=list,因为使用default=[]将创建一个在字段的所有实例之间共享的可变对象,并且可能导致某些对象没有默认的空列表。

请注意,这不仅适用于django.contrib.postgres.fields.JSONField,也适用于所有其他类型的对象和函数in Python in general

引用自文档:

如果您为字段提供了默认值,请确保它是可调用的,如list (表示空默认值)或返回列表的可调用对象(如函数)。错误地使用default=[]会创建一个在所有

实例之间共享的可变缺省值

票数 55
EN

Stack Overflow用户

发布于 2019-11-15 22:11:05

listdict是可调用的,而[]{}是不可调用的(您不能调用[]())。所以:

通过JSONField(default=[])

  • Use JSONField(default=dict)JSONField(default={})

使用JSONField(default=list)

如果您想实例化一些数据,您可以执行以下操作:

代码语言:javascript
复制
def jsonfield_default_value():  # This is a callable
    return [0, 0]  # Any serializable Python obj, e.g. `["A", "B"]` or `{"price": 0}`

class MyModel(Model):
    the_list_field = JSONField(default=jsonfield_default_value)
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42239818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档