Solución:
parece que datetime.now()
se evalúa cuando se define el modelo y no cada vez que agrega un registro.
Django tiene una función para lograr lo que ya estás intentando hacer:
date = models.DateTimeField(auto_now_add=True, blank=True)
o
date = models.DateTimeField(default=datetime.now, blank=True)
La diferencia entre el segundo ejemplo y lo que tiene actualmente es la falta de paréntesis. Pasando datetime.now
sin los paréntesis, está pasando la función real, que se llamará cada vez que se agregue un registro. Si lo pasas datetime.now()
, entonces solo está evaluando la función y pasándole el valor de retorno.
Hay más información disponible en la referencia de campo del modelo de Django.
En lugar de usar datetime.now
realmente deberías estar usando from django.utils.timezone import now
Referencia:
- Documentación para
django.utils.timezone.now
así que ve por algo como esto:
from django.utils.timezone import now
created_date = models.DateTimeField(default=now, editable=False)
De la documentación en el campo predeterminado del modelo django:
El valor predeterminado para el campo. Puede ser un valor o un objeto invocable. Si es invocable, se llamará cada vez que se cree un nuevo objeto.
Por lo tanto, lo siguiente debería funcionar:
date = models.DateTimeField(default=datetime.now,blank=True)