36

我正在使用 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 小时。

4

1 回答 1

52

迁移文档解决了这个问题:

迁移只是包含模型旧定义的 Python 文件——因此,要编写它们,Django 必须获取模型的当前状态并将它们序列化到文件中。虽然 Django 可以序列化大多数东西,但有些东西我们无法序列化为有效的 Python 表示......

Django 可以序列化以下内容:任何函数或方法引用...在模块的顶级范围内

Django 无法序列化:Lambdas

所以解决方案很简单:代替 lambda,定义一个常规函数并按名称引用它。

def one_day_hence():
    return datetime.utcnow() + timezone.timedelta(days=1)

class MyModel(models.Model):
    y = models.DateTimeField(default=one_day_hence)
于 2014-11-22T06:43:25.067 回答