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?
Respuestas:
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):
....
created
y updated
. 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
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.
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
model_utils
para Django que ya lo contieneTimeStampedModel
, pero si no necesita nada más de este paquete, manténgalo sin peso adicional.