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

Django模型date_added显示为1900年1月1日的问题及解决

问题解决方法

问题根源

你犯了两个关键错误:

  1. 字段类型选错:用TimeField存储创建时间,但TimeField只保存时、分、秒,不包含日期,数据库会自动给所有记录填充默认日期1900-01-01,导致所有主题日期一致,自然无法按时间排序。
  2. 排序字段名写错:视图里的order_by("date-added")是错的,应该用下划线连接的date_added。

修复步骤

1. 修改模型字段类型

把TimeField改成DateTimeField,它能同时存储日期和完整时间戳,auto_now_add=True会自动记录对象创建的准确时间:

class Topic(models.Model):
    """A topic the user is learning about"""
    text = models.CharField(max_length=200)
    # 替换TimeField为DateTimeField
    date_added = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        """Return a string representation of the model"""
        return self.text

2. 执行数据库迁移

在项目根目录下运行以下命令,更新数据库表结构:

python manage.py makemigrations
python manage.py migrate

3. 修正视图中的排序代码

把错误的date-added改成正确的date_added:

topics = Topic.objects.order_by("date_added")

4. 验证修复结果

在Django Shell里重新查询,就能看到正确的日期时间了(注意修正strftime里的$H为%H的笔误):

for topic in Topic.objects.order_by("date_added"):
    print(topic, topic.date_added.strftime("%d.%m.%Y %H:%M:%S"))

关于已有数据的说明

之前用TimeField存储的记录,日期部分是1900-01-01,迁移后这些记录的date_added会变成1900-01-01 原时间。如果需要修正这些旧记录的日期,你可以手动批量更新,或者根据实际情况忽略(新创建的主题会自动使用正确的当前日期时间)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:52:37