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

Django访问/blog路径触发sqlite日期转换ValueError错误如何解决

错误根本原因

你看到的模板第11行Bootstrap链接报错是Django调试页的定位误导,实际错误和Bootstrap完全无关,核心问题出在date_posted字段的定义和数据库存储的内容不匹配:

  • 模型中定义的date_posted是DateField类型,该类型仅支持存储年-月-日格式的纯日期数据,SQLite读取该字段时会默认用-分割字符串,转成整数后生成日期对象
  • 你数据库的date_posted字段中已经存在带时分秒的时间值(报错中的b'11 18:52:18'就是不符合格式的时间内容),大概率是你之前修改过字段类型,此前可能使用DateTimeField存了带时间的数值,改回DateField后旧数据无法匹配格式要求,转换失败就抛出了错误
  • 加载博客页面时需要查询Post列表,触发数据库读取该字段,报错时刚好渲染到模板第11行,才会出现指向Bootstrap链接的错误提示

正确修复方案

方案1:需要显示完整日期+时间

如果你的业务需要展示发布的具体时间,把字段类型改为DateTimeField,同时设置默认值避免迁移报错:

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Post(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

修改完成后执行迁移命令更新数据库结构:

python manage.py makemigrations
python manage.py migrate

方案2:只需要显示纯日期

如果只需要展示年月日信息,先清除数据库里的错误数据再重建字段即可:

  1. 先保持date_posted字段注释状态,执行迁移删除数据库中该字段:
python manage.py makemigrations
python manage.py migrate
  1. 取消date_posted字段注释,设置默认值:
date_posted = models.DateField(default=timezone.now)
  1. 再次执行迁移命令重建该字段,旧的错误格式数据已经被清空,不会再触发转换错误。

快速处理方案

如果数据库中没有重要的测试数据,可以直接删除项目根目录下的SQLite数据库文件,重新执行迁移生成全新的数据库,也可以直接解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:00