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

9-b*_*its 80 django django-models django-views

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

Mos*_*Bin 140

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

created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

您还可以使用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)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用“auto_now”或“auto_now_add”选项会导致该字段也具有“editable=False”,因此您无需显式指定它。 (3认同)

Yuj*_*ita 28

自动地听起来不像django默认会做的事情.它不会强迫您需要时间戳.

如果你不想忘记时间戳/字段名等,我会构建一个抽象基类并从中继承所有模型.

class TimeStampedModel(models.Model):
     created_on = models.DateTimeField(auto_now_add=True)

     class Meta:
         abstract = True
Run Code Online (Sandbox Code Playgroud)

导入wherever.TimeStampedModel而不是导入似乎并不多django.db.models.Model

class MyFutureModels(TimeStampedModel):
    ....
Run Code Online (Sandbox Code Playgroud)

  • Django中还有一个“ model_utils”,其中已经包含“ TimeStampedModel”,但是如果您不需要此包中的其他任何东西,只需增加重量即可。 (2认同)

Tim*_*ony 13

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


Wag*_*agh 5

你可以试试django-extensions

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

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...
Run Code Online (Sandbox Code Playgroud)

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