【发布时间】:2020-08-21 19:11:06
【问题描述】:
我有一个 JSONField,我需要对其应用默认字典。根据文档,我避免将可变字典传递给默认字段。这是通过将复制方法传递给默认参数来完成的,如下所示:
default_dict = {'some_key': 'some value'}
class MyModel(models.Model):
my_field = models.JSONField(default=default_dict.copy)
在应用 makemigrations 时,由于 django.db.migrations.serializer.FunctionTypeSerializer 中的以下条件而失败:
if self.value.__module__ is None:
raise ValueError("Cannot serialize function %r: No module" % self.value)
我可以通过定义一个返回副本的可调用来解决这个问题,但我认为这会增加不必要的语法并使其更难阅读:
class ADict(dict):
def __call__(self):
return self.copy()
default_dict = ADict({'some_key': 'some value'})
class MyModel(models.Model):
my_field = models.JSONField(default=default_dict)
有没有办法将内置对象方法作为 Django 字段的默认值传递?
【问题讨论】:
-
你不能这样做,因为它基本上需要一个命名函数,而
default_dict.copy是一个“匿名”函数。
标签: django django-models django-migrations