2014-11-21 5 views
15

Używam Django 1.7.1. Mój model wygląda następująco:Django 1.7.1 Makemigracje nie udają się, gdy domyślnie używa się lambda dla atrybutu

Wszystko działa idealnie.

Jednak kiedy dodać następujący atrybut do myModel, przerywa:

y = models.DateTimeField(default=lambda: datetime.utcnow() + timedelta(days=1), editable=False) 

manage.py makemigrations daje mi następujący błąd:

ValueError: Cannot serialize function: lambda 

Wydaje się to znany błąd: http://comments.gmane.org/gmane.comp.python.django.scm/125724

Jak mogę to obejść? Potrzebuję automatycznie ustawić wartość y na 24 godziny od momentu utworzenia modelu.

Odpowiedz

24

W migrations documentation adresy w ten sposób:

Migrations are just Python files containing the old definitions of your models - thus, to write them, Django must take the current state of your models and serialize them out into a file. While Django can serialize most things, there are some things that we just can’t serialize out into a valid Python representation....

Django can serialize the following: Any function or method reference

Django cannot serialize: Lambdas

Więc rozwiązanie jest proste: wystarczy zdefiniować funkcję w zakresie modułu zamiast używać lambda.

+0

Pracował. Dzięki. –

+1

Natknąłem się na twoją odpowiedź. Dla początkujących, takich jak ja, nie będziemy wiedzieć, co masz na myśli przez "zdefiniuj funkcję w zakresie modułu". – Valachio

+0

@Valachio Oznacza to zdefiniowanie funkcji w tym samym pliku. Zobacz przykład tutaj: https://stackoverflow.com/a/15289517/490592 –