today for example datetimefield auto_now python django django-models

python - for - Opciones predeterminadas de Django DateField



default for datetimefield django (5)

Esto debería funcionar:

models.DateTimeField(_("Date"), auto_now_add = True)

Tengo un modelo que tiene un campo de fecha y hora:

date = models.DateField(_("Date"), default=datetime.now())

Cuando reviso la aplicación en el administrador de django incorporado, DateField también tiene el tiempo agregado, de modo que si intentas guardarlo, devuelve un error. ¿Cómo hago que el valor predeterminado sea solo la fecha? (datetime.today () tampoco funciona)


También puedes usar lambda . Útil si estás usando django.utils.timezone.now

date = models.DateField(_("Date"), default=lambda: now().date())


Tu error es usar el módulo de fecha y hora en lugar del módulo de fecha. Querías hacer esto:

from datetime import date date = models.DateField(_("Date"), default=date.today)

Si solo quiere capturar la fecha actual, la forma correcta de manejar esto es usar el parámetro auto_now_add:

date = models.DateField(_("Date"), auto_now_add=True)

Sin embargo, los documentos de modelfield claramente indican que auto_now_add y auto_now siempre usarán la fecha actual y no son un valor predeterminado que puede anular.


Esta es la razón por la que siempre debe importar el módulo base de datetime : import datetime , en lugar de la clase datetime dentro de ese módulo: from datetime import datetime .

El otro error que ha cometido es llamar realmente a la función en el valor predeterminado, con el () . Esto significa que todos los modelos obtendrán la fecha en el momento en que se definió por primera vez la clase , por lo que si el servidor permanece activo durante días o semanas sin reiniciar Apache, todos los elementos obtendrán la misma fecha inicial.

Entonces el campo debería ser:

import datetime date = models.DateField(_("Date"), default=datetime.date.today)


date = models.DateTimeField(default=datetime.now, blank=True)