📅  最后修改于: 2023-12-03 15:00:27.259000             🧑  作者: Mango
在 Django 中,我们经常需要记录模型的创建时间和修改时间。为了实现这一需求,我们可以使用 auto_now_add
和 auto_now
参数来自动生成时间戳。
auto_now_add
用于记录模型实例的创建时间,它会在模型实例第一次被保存到数据库中时,自动将当前时间戳写入到指定的字段中。
以下是一个例子:
from django.db import models
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
当我们创建一个 MyModel
实例时,它会自动记录当前时间戳并将其写入到 created_at
字段中。这个时间戳会一直保持不变,直到我们手动修改 created_at
字段。
auto_now
用于记录模型实例的修改时间,它会在模型实例每次被保存到数据库中时,自动将当前时间戳写入到指定的字段中。
以下是一个例子:
from django.db import models
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
当我们修改一个 MyModel
实例时,它会自动记录当前时间戳并将其写入到 updated_at
字段中。每次保存实例时都会更新这个时间戳。
auto_now_add
和 auto_now
只能用于 DateField
、DateTimeField
、TimeField
和 TimestampField
类型的字段中。auto_now_add
和 auto_now
在 serializer
中可能不会正常工作,需要手动设置时间戳。django.utils.timezone
模块来获取当前时区的时间戳。例如:timezone.now()
。总的来说,auto_now_add
和 auto_now
很方便,可以省去手动记录时间戳的麻烦。但是在某些情况下,我们可能需要手动设置时间戳或使用其他方式来记录时间。在这种情况下,我们可以使用 Django 的信号来自定义实现。