Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django和Django JSONField中将JSONField的默认值设置为空列表? 问题:_Python_Django_Django Models_Reference - Fatal编程技术网

Python 如何在Django和Django JSONField中将JSONField的默认值设置为空列表? 问题:

Python 如何在Django和Django JSONField中将JSONField的默认值设置为空列表? 问题:,python,django,django-models,reference,Python,Django,Django Models,Reference,在django中设置新列表的默认值的最佳方法是什么 上下文 有一个模型,其中一个字段是项目列表。如果未设置任何项,则模型应具有空列表 当前解决方案 这是最好的方法吗?是否应改为使用列表 谢谢 根据标准,您确实应该使用default=list 因为使用default=[]将创建一个可变对象,该对象在字段的所有实例之间共享,并可能导致某些对象的默认列表不是空的 请注意,这不仅适用于django.contrib.postgres.fields.JSONField,而且适用于所有其他类型的对象和函数 引

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

上下文 有一个模型,其中一个字段是项目列表。如果未设置任何项,则模型应具有空列表

当前解决方案 这是最好的方法吗?是否应改为使用
列表

谢谢

根据标准,您确实应该使用
default=list
因为使用
default=[]
将创建一个可变对象,该对象在字段的所有实例之间共享,并可能导致某些对象的默认列表不是空的

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

引用文件:

如果给字段一个默认值,请确保它是一个可调用的字段,例如list(对于空的默认值)或返回列表的可调用字段(例如函数)。错误地使用default=[]会创建一个可变的默认值,该默认值在的所有实例之间共享


list
dict
是可调用的,而
[]
{}
不是(您不能执行
[]()
)。因此:

  • 使用
    JSONField(默认值=列表)
    覆盖
    JSONField(默认值=[])
  • 使用
    JSONField(默认值=dict)
    覆盖
    JSONField(默认值={})
如果要使用某些数据进行实例化,可以执行以下操作:

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)

有什么理由不使用Django的内置jsonfield吗?@RodXavier MySQL<5.7和其他遗留代码使用它们,以保持一致性。
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)