首页 > 解决方案 > Django ArrayField 默认应该是可调用的

问题描述

我正在尝试在我的 django 项目中使用 postgresql ArrayField 将其设置为默认值,但我无法摆脱警告ArrayField default should be a callable instead of an instance so that it's not shared between all field instances. HINT: Use a callable instead, e.g. use list instead of []

这是我的代码:

def get_default_subscriptions():
    return 'Noticias, Promociones, Pagos, Compras'.split(', ') # this returns a list
 
class myModel(models.model):
    # other fields
    subscriptions = ArrayField(models.CharField(max_length=200), default=get_default_subscriptions()) # this is a callable, so, why the warning?

文档对此说:If you give the field a default, ensure it’s a callable such as list (for an empty default) or a callable that returns a list (such as a function). Incorrectly using default=[] creates a mutable default that is shared between all instances of ArrayField.

你能告诉我我做错了什么吗?

标签: pythondjangopostgresql

解决方案


使用default=get_default_subscriptions(不带括号)代替default=get_default_subscriptions()


推荐阅读