当我尝试manage.py makemigrations
在 Django 1.7 上运行时,出现以下错误:
ValueError: Cannot serialize: <bound method ModelBase.get_default of <class 'printapp.models.JobConfiguration'>>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing
get_default
因此,在 上定义的方法似乎存在问题JobConfiguration
,其定义在下面重复:
@classmethod
def get_default(cls):
result = cls()
result.save()
return result
按照错误消息中提供的链接,序列化“类引用”似乎是受支持的功能。
“类引用”是否与 a 相同@classmethod
?
我如何将“类引用”放在“模块的顶级范围”中?
为什么必须通过迁移来跟踪方法?我假设迁移是针对数据库模式的,它只跟踪存储的数据类型,而不是类使用的方法类型。
值得注意的是:将 的定义更改get_default
为下面重复的静态方法可以解决问题,但代价是必须对JobConfiguration
类名进行硬编码。
@staticmethod
def get_default():
result = JobConfiguration()
result.save()
return result
JobConfiguration.get_default
(一些上下文:这个方法在 a中被引用,models.OneToOneField(JobConfiguration, default=JobConfiguration.get_default)
效果是为每个创建的这些字段创建一个新的 JobConfiguration。)