Tengo un modelo que tiene un campo de fecha y hora:
date = models.DateField(_("Date"), default=datetime.now())
Cuando verifico la aplicación en el administrador de django integrado, DateField
también se le agrega el tiempo, de modo que si intenta guardarlo, se devuelve un error. ¿Cómo hago que el valor predeterminado sea solo la fecha? ( datetime.today()
tampoco funciona)
fuente
_("Date")
haciendoTu error es usar el
datetime
módulo en lugar deldate
módulo. Querías hacer esto:from datetime import date date = models.DateField(_("Date"), default=date.today)
Si solo desea capturar la fecha actual, la forma correcta de manejar esto es usar el
auto_now_add
parámetro:date = models.DateField(_("Date"), auto_now_add=True)
Sin embargo, los documentos modelfield estado claramente que
auto_now_add
yauto_now
será siempre usar la fecha actual y no son un valor predeterminado que se puede anular.fuente
date = models.DateTimeField(default=datetime.now, blank=True)
fuente
Creo que una mejor manera de resolver esto sería usar la fecha y hora invocables:
from datetime import datetime date = models.DateField(default=datetime.now)
Tenga en cuenta que no se utilizaron paréntesis. Si usó paréntesis, invocaría la
now()
función solo una vez (cuando se crea el modelo). En su lugar, pasa el invocable como un argumento, por lo que se invoca cada vez que se crea una instancia del modelo.Crédito a Django Musings . Lo he usado y funciona bien.
fuente
Esto debería funcionar:
models.DateTimeField(_("Date"), auto_now_add = True)
fuente
También puede utilizar
lambda
. Útil si estás usando django.utils.timezone.nowdate = models.DateField(_("Date"), default=lambda: now().date())
fuente
Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.