2014-11-21 10 views
15

Sto usando Django 1.7.1. Il mio modello è simile al seguente:Django 1.7.1 Makemigrations non riesce quando si utilizza lambda come predefinito per l'attributo

from datetime import datetime 
from django.db import models 

class myModel(models.Model): 
    x = models.CharField(max_length=254,null=True, blank=True,) 

Tutto funziona perfettamente.

Tuttavia, quando aggiungo il seguente attributo al MyModel, si rompe:

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

manage.py makemigrations mi dà il seguente errore:

ValueError: Cannot serialize function: lambda 

Questo mi sembra un bug noto: http://comments.gmane.org/gmane.comp.python.django.scm/125724

Quindi come posso aggirarlo? Ho bisogno che il valore di y sia impostato automaticamente per impostazione predefinita a 24 ore dal momento in cui il modello è stato creato.

risposta

24

Gli indirizzi migrations documentation questa:

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

Quindi la soluzione è semplice: basta definire una funzione in un contesto di modulo piuttosto che utilizzare un lambda.

+0

Ha funzionato. Grazie. –

+1

Mi sono imbattuto nella tua risposta. Per i principianti come me, non sapremo cosa intendi per 'definire la funzione in ambito modulo'. – Valachio

+0

@Valachio Significa definire la funzione nello stesso file. Guarda un esempio qui: https://stackoverflow.com/a/15289517/490592 –

Problemi correlati