在Django中,模型是否具有默认时间戳字段?


89

在Django中-所有对象都有默认的时间戳字段吗?也就是说,我是否必须在模型中为“创建于”显​​式声明一个“时间戳”字段-还是有办法自动地做到这一点?

Answers:


170

默认情况下没有这样的事情,但是添加一个超级容易。只需auto_now_addDateTimeField类中使用参数:

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)

32

自动听起来不像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):
    ....

2
还有model_utilsDjango的其中包含已TimeStampedModel,但如果你不需要从这个包别的,只保持W / O额外的重量。
13年

@boldnik我很喜欢简单。
Yuji'Tomita'Tomita

太酷了……我有3个类需要为created和加上时间戳updated。这是干净地做它的好方法。
ron_g


5

您可以尝试django-extensions

如果要使用时间戳抽象模型

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

它具有其他抽象模型。您也可以使用它。


2

如果您希望能够修改此字段,请设置以下内容,而不是 auto_now_add=True:

对于日期

from datetime import date

models.DateField(default=date.today)

对于DateTime

from django.utils import timezone

models.DateTimeField(default=timezone.now)

0

我想我会去

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.