Django 1.7.1 Макемиграции терпят неудачу при использовании лямбда по умолчанию для атрибута

Я использую 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 часа с момента создания модели.

Ответ 1

Документация по миграции адресует следующее:

Миграции - это только файлы Python, содержащие старые определения ваших моделей, поэтому для их записи Django должен взять текущее состояние ваших моделей и сериализовать их в файл. Хотя Django может сериализовать большинство вещей, есть некоторые вещи, которые мы просто не можем сериализовать в действительное представление Python....

Django может сериализовать следующее: Любая ссылка на функцию или метод

Django не может сериализоваться: Lambdas

Итак, решение прост: просто определите функцию в области модуля, а не используя лямбда.