“Se proporcionó un valor predeterminado fijo” después de actualizar a Django 1.8
django-1.8 (1)
La función datetime.now()
se ejecuta actualmente tan pronto como se importa su código, es decir, cuando (re) inicia su servidor. Todas las instancias de modelo posteriores tendrán el mismo valor.
En su lugar, debe pasar una función invocable a la default
, que se ejecuta cada vez que una instancia del modelo necesita un valor predeterminado. La sugerencia desea transmitir que, literalmente, debe usar DateField(default=django.utils.timezone.now)
sin los paréntesis.
El mensaje es ligeramente engañoso, pero Django no sabe si django.utils.timezone.now()
datetime.now()
o django.utils.timezone.now()
.
Django 1.8 ahora tiene algunos problemas de detección de modelos, lo cual es bueno. Sin embargo, por una advertencia de que me está dando, entiendo el problema, pero no entiendo cómo la pista que me está dando es mejor.
Este es mi (mal) campo de modelo:
my_date = DateField(default=datetime.now())
y es fácil ver por qué eso es malo. Pero esta es la pista que me está dando:
MyMoel.my_date: (fields.W161) Se proporcionó un valor predeterminado fijo.
SUGERENCIA: Parece que establece un valor de fecha / hora / fecha fija como predeterminado para este campo. Esto puede no ser lo que quieres. Si desea tener la fecha actual como predeterminada, use `django.utils.timezone.now`
Entonces, dice usar timezone.now
, pero ¿cómo es eso mejor que datetime.now
? Ambos son valores "predeterminados fijos" ... timezone.now
simplemente devuelve una instancia de fecha y hora, que es un valor fijo ...
Sospecho que en realidad quiere que inserte algún tipo de marca que diga "usar timezone.now
later ". Pero eso no es lo que dice la pista ... entonces, ¿qué es esa bandera?