En django, ¿hay un campo de marca de tiempo predeterminado para todos los objetos? Es decir, ¿tengo que declarar explícitamente un campo de 'marca de tiempo' para 'creado en' en mi modelo, o hay alguna manera de obtener esto automágicamente?
fuente
En django, ¿hay un campo de marca de tiempo predeterminado para todos los objetos? Es decir, ¿tengo que declarar explícitamente un campo de 'marca de tiempo' para 'creado en' en mi modelo, o hay alguna manera de obtener esto automágicamente?
No existe tal cosa por defecto, pero agregar uno es muy fácil. Simplemente use el auto_now_add
parámetro en la DateTimeField
clase:
created = models.DateTimeField(auto_now_add=True)
También puede utilizar auto_now
para un campo "actualizado en". Compruebe el comportamiento de auto_now
aquí .
Por auto_now_add
aquí .
Un modelo con ambos campos se verá así:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Automágicamente no suena como algo que django haría por defecto. No le obligaría a solicitar una marca de tiempo.
Construiría una clase base abstracta y heredaría todos los modelos de ella si no quiere olvidarse de la marca de tiempo / nombre de campo, etc.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
No parece mucho importar en wherever.TimeStampedModel
lugar dedjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
model_utils
para Django que ya lo contieneTimeStampedModel
, pero si no necesita nada más de este paquete, manténgalo sin peso adicional.created
yupdated
. Esta es una excelente manera de hacerlo de manera limpia.Si está usando django-extensions (que es una buena aplicación para agregar funcionalidad al ayudante de línea de comando django-admin.py) puede obtener estos campos de modelo de forma gratuita heredando de su TimeStampedModel o usando sus campos de TimeStamp personalizados
fuente
Puedes probar django-extensions
si desea utilizar el modelo abstracto de marca de tiempo
from django_extensions.db.models import TimeStampedModel class A(TimeStampedModel): ...
Tiene otros modelos abstractos. también puedes usar eso.
fuente
Si desea poder modificar este campo, establezca lo siguiente en lugar de
auto_now_add=True:
Para la fecha
from datetime import date models.DateField(default=date.today)
Para DateTime
from django.utils import timezone models.DateTimeField(default=timezone.now)
fuente
Creo que iría con
created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True)
Necesito algunas aclaraciones sobre el uso
class TimeStampedModel(models.Model): created_on = models.DateTimeField(auto_now_add=True) class Meta: abstract = True
fuente