私は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時間に自動的に設定する必要があります。
移行ドキュメント はこれに対処します:
移行は、モデルの古い定義を含むPythonファイルです-したがって、それらを書き込むには、Djangoは、モデルの現在の状態を取得してシリアル化する必要がありますDjangoはほとんどのものをシリアル化できますが、有効なPython表現...にシリアル化できないものもあります。
Djangoは以下をシリアル化できます:任意の関数またはメソッド参照
Djangoはシリアル化できません:Lambdas
したがって、ソリューションは単純です。ラムダを使用するのではなく、モジュールスコープで関数を定義するだけです。