在Django中-所有对象都有默认的时间戳字段吗?也就是说,我是否必须在模型中为“创建于”显式声明一个“时间戳”字段-还是有办法自动地做到这一点?
Answers:
默认情况下没有这样的事情,但是添加一个超级容易。只需auto_now_add
在DateTimeField
类中使用参数:
created = models.DateTimeField(auto_now_add=True)
您也可以使用auto_now
“更新日期”字段。检查auto_now
此处的行为。
对于 auto_now_add
这里。
具有两个字段的模型将如下所示:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
自动听起来不像django默认会做的事情。它不会强迫您要求时间戳。
如果您不想忘记时间戳/字段名等,我将构建一个抽象基类并从中继承所有模型。
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
似乎没有多少要导入wherever.TimeStampedModel
而不是django.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
和加上时间戳updated
。这是干净地做它的好方法。
如果您使用的是django-extensions(这是一个向django-admin.py命令行助手添加功能的好应用程序),则可以通过从其TimeStampedModel继承或使用其自定义的TimeStamp字段免费获得这些模型字段
您可以尝试django-extensions
如果要使用时间戳抽象模型
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
它具有其他抽象模型。您也可以使用它。
我想我会去
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
我需要一些使用说明
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
Django的其中包含已TimeStampedModel
,但如果你不需要从这个包别的,只保持W / O额外的重量。