Django向REST API POST数据时如何自动添加类似AutoField 'ID'的时间戳
DateTimeField自动填充时间戳实现方案
以下是基于Django ORM的通用实现方式,其他ORM框架逻辑类似,可参考对应框架的字段配置/生命周期钩子实现:
固定自动生成、不允许手动修改的场景
和AutoField类型的ID逻辑完全一致,仅在数据首次插入数据库时自动赋值,后续修改不会变更:
- 给字段配置
auto_now_add=True参数即可,配置样例如下:
from django.db import models class 你的模型类(models.Model): # 你的其他业务字段 create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
如果需要每次数据更新时自动刷新为最新时间,可以使用auto_now=True参数:
from django.db import models class 你的模型类(models.Model): # 你的其他业务字段 update_time = models.DateTimeField(auto_now=True, verbose_name="最后更新时间")
需要同时支持自动生成+手动修改的场景
如果你的需求是默认自动生成时间戳,手动传入指定时间时优先使用传入值,不要配置上述两个参数,重写模型的save方法即可:
from django.db import models from django.utils import timezone class 你的模型类(models.Model): custom_time = models.DateTimeField(verbose_name="时间字段", null=True, blank=True) def save(self, *args, **kwargs): # 首次创建且没有手动传入时间时自动填充 if not self.pk and not self.custom_time: self.custom_time = timezone.now() super().save(*args, **kwargs)
注意:修改模型字段配置后需要执行
makemigrations和migrate命令完成数据库迁移才会生效。
内容的提问来源于stack exchange,提问作者Nic0lodeon
相关产品推荐
相关产品推荐

