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

Django 3.2.9执行migrate时出现TransactionManagementError如何解决

报错原因分析
  1. 模型代码存在语法错误:Order模型的placed_at字段使用了Django不存在的参数auto_now_date=True,正确的DateTimeField时间自动填充参数为auto_now_add=True(创建时自动写入时间)或auto_now=True(每次更新时自动写入时间)。该错误导致迁移执行过程异常中断,破坏了迁移记录的写入流程,触发django_migrations表的applied字段非空约束报错。
  2. 衍生事务错误:后续的TransactionManagementError是前序异常的衍生问题,迁移执行失败导致当前事务被中断,Django禁止在损坏的事务中继续执行查询。
  3. 额外注意:OrderItem模型的quantiy字段名存在拼写错误,正确拼写为quantity,虽然不直接触发本次迁移报错,但会导致后续业务代码调用时出错。
解决步骤

如果你是开发阶段,没有需要保留的生产/测试数据,按以下步骤操作即可解决:

  • 第一步:修正models.py代码错误
    1. 将Order类的placed_at字段代码替换为:
    placed_at = models.DateTimeField(auto_now_add=True)
    
    1. 可选修正:将OrderItem类的quantiy字段名修改为quantity
  • 第二步:清理损坏的迁移和数据库文件
    1. 删除项目根目录下默认的db.sqlite3数据库文件
    2. 删除你自行创建的所有App(报错日志中可见的store、likes、tags等)下migrations目录内,除__init__.py之外的所有文件
  • 第三步:重新执行迁移流程
    依次运行以下命令:
    python manage.py makemigrations
    python manage.py migrate
    

如果有需要保留的现有数据,可先备份数据库文件,手动进入sqlite数据库删除django_migrations表中的异常记录,修正模型错误后重新执行迁移即可。

内容的提问来源于stack exchange,提问作者Hoàng Đức Khánh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:15:07