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_addparámetro en la DateTimeFieldclase:
created = models.DateTimeField(auto_now_add=True)
También puede utilizar auto_nowpara 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.TimeStampedModellugar dedjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
createdy 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_utilspara Django que ya lo contieneTimeStampedModel, pero si no necesita nada más de este paquete, manténgalo sin peso adicional.