You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何设置固定datetime.now()变量避免文章创建日期每次更新重置

问题根因

你当前的写法存在两处核心错误:

  • 没有将日期属性定义为Django ORM要求的DateTimeField字段类型,直接赋值为Python原生datetime对象,完全不符合模型字段的定义规范
  • 直接写死datetime.now()会在Django项目启动加载模型类时就计算出一个固定时间,不会在每条记录创建、更新时动态生成时间
解决方案

Django的DateTimeField内置了专门的参数用来区分创建时间和更新时间,不需要自己手动处理时间赋值逻辑:

  • auto_now_add=True:仅在对象第一次写入数据库时自动写入当前时间,后续修改对象时不会更新该字段值,完全满足创建时间的需求
  • auto_now=True:每次对象保存(包括新增、修改)时都会自动更新为当前时间,正好对应最后编辑时间的需求

修正后的代码如下:

from django.db import models

class Post(models.Model):
    # 此处保留你其他的字段定义
    date_created = models.DateTimeField(auto_now_add=True)
    last_edited_date = models.DateTimeField(auto_now=True)
补充说明

如果后续你需要允许手动修改这两个时间的值,就不能使用auto_now_add和auto_now参数,可以通过重写模型的save方法实现逻辑控制,示例代码如下:

from django.db import models
from datetime import datetime

class Post(models.Model):
    # 此处保留你其他的字段定义
    date_created = models.DateTimeField()
    last_edited_date = models.DateTimeField()

    def save(self, *args, **kwargs):
        # 首次创建对象时无主键,设置创建时间
        if not self.pk:
            self.date_created = datetime.now()
        # 每次保存都更新最后编辑时间
        self.last_edited_date = datetime.now()
        super().save(*args, **kwargs)

内容的提问来源于stack exchange,提问作者Han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 02:33:05