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

Django执行migrate报错products_customer表id列多默认值,已删模型如何解决

问题原因

你已从models.py中移除Customer模型,但历史生成的待应用迁移文件0004_auto_20211114_2342中仍包含对products_customer表的字段修改操作,该操作存在语法错误,为id字段同时指定了多个默认值,导致migrate执行失败。
执行makemigrations提示无变更的原因是:Django只会对比当前models.py与上一次迁移的状态,不会自动清理已生成的历史迁移文件中的无效操作。

解决步骤
  • 首先进入你的products应用的migrations文件夹,删除有问题的0004_auto_20211114_2342.py文件,以及编号大于0004的其他迁移文件,注意不要删除文件夹内的__init__.py文件。
  • 无需保留现有数据库数据的场景:
    直接删除当前数据库,重新创建空数据库后执行以下命令即可:
    python manage.py makemigrations
    python manage.py migrate
    
  • 需要保留现有数据库数据的场景:
    1. 先查看products应用的迁移应用状态,确认0004之前的最后一个已应用的迁移编号:
    python manage.py showmigrations products
    
    1. 执行命令标记该迁移之前的所有迁移都已应用,跳过有问题的0004迁移,示例命令(请替换为你实际的0003版本号):
    python manage.py migrate --fake products 0003_auto_2021xxxx_xxxx
    
    1. 重新生成迁移并应用,此时Django会基于当前无Customer模型的代码生成新迁移,自动处理冗余的products_customer表:
    python manage.py makemigrations
    python manage.py migrate
    
  • 额外修复项:你提供的models.py中create_user_address函数前多了缩进,需要调整到和下方save_user_address函数对齐,和@receiver装饰器保持同缩进级别,否则运行时会触发语法错误。

内容的提问来源于stack exchange,提问作者SUJITH JOHN PHILIP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:03