在django中,模型有一个默认的时间戳字段吗?

时间:2011-11-04 22:25:57

标签: django django-models django-views

在django中 - 是否有所有对象的默认时间戳字段?也就是说,我是否必须在我的模型中为'created on'显式声明'timestamp'字段 - 或者有没有办法自动获得它?

6 个答案:

答案 0 :(得分:125)

默认情况下没有这样的东西,但添加一个是非常容易的。只需使用auto_now_add类中的DateTimeField参数:

created = models.DateTimeField(auto_now_add=True)

您还可以使用auto_now作为“已更新”字段。 检查auto_now here的行为。

auto_now_add here

包含两个字段的模型将如下所示:

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

答案 1 :(得分:28)

自动听起来不像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 :(得分:13)

如果您正在使用django-extensions(这是一个用于向django-admin.py命令行帮助程序添加功能的好应用程序),您可以通过继承their TimeStampedModel或使用来免费获取这些模型字段他们的custom TimeStamp fields

答案 3 :(得分:4)

您可以尝试django-extensions

如果你想使用时间戳抽象模型

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

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

答案 4 :(得分:1)

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

日期

from datetime import date

models.DateField(default=date.today)

对于DateTime

from django.utils import timezone

models.DateTimeField(default=timezone.now)

答案 5 :(得分: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