我正在使用Django 1.7.1。我的模型看起来像这样:
from datetime import datetime
from django.db import models
class myModel(models.Model):
x = models.CharField(max_length=254,null=True, blank=True,)
一切都很好。
但是,当我将以下属性添加到myModel时,它会中断:
y = models.DateTimeField(default=lambda: datetime.utcnow() + timedelta(days=1), editable=False)
manage.py makemigrations
给出了以下错误:
ValueError: Cannot serialize function: lambda
这似乎是一个已知的错误:http://comments.gmane.org/gmane.comp.python.django.scm/125724
那么我该如何解决呢?我需要将y
的值默认自动设置为从创建模型的那一刻起的24小时。
答案 0 :(得分:33)
migrations documentation解决了这个问题:
迁移只是包含模型的旧定义的Python文件 - 因此,为了编写它们,Django必须采用模型的当前状态并将它们序列化为文件。虽然Django可以序列化大多数东西,但有些东西我们无法将其序列化为有效的Python表示....
Django可以序列化以下内容:任何函数或方法引用
Django无法序列化:Lambdas
所以解决方案很简单:只需在模块范围内定义函数,而不是使用lambda。