这个错误:
django.db.utils.OperationalError: (1060, "Duplicate column name 'country_code'")
说明你在运行 migrate 时,Django 尝试向数据库表中添加一个已经存在的列(country_code),可能的原因如下:
原因分析
1.你修改了模型字段名或添加字段,但之前已经手动或通过其他方式修改过数据库表;
2.你的 migrations 文件记录和数据库的实际结构不同步;
3.可能你已经把 country_code 添加进模型了,但忘了或手动回退了迁移记录。
✅ 解决方案
方法一:回退有问题的迁移,然后重建迁移文件
1.删除最近一次的迁移文件(在 core/migrations/ 或对应 app 的 migrations/ 文件夹中,非 init.py 的文件)。
2.然后重新生成:
python manage.py makemigrations
3.执行迁移:
python manage.py migrate
方法二:直接手动编辑数据库(危险,仅推荐开发环境)
1.登录你的数据库(如使用 MySQL)
DESC xss_order;
2.检查是否已经有 country_code 字段。
3.如果你确认之前是手动或意外加过该字段,可以先在数据库中手动删除:
ALTER TABLE xss_order DROP COLUMN country_code;
然后重新运行迁移:
python manage.py migrate
方法三:伪迁移(跳过迁移步骤)
如果你知道数据库字段已经正确存在,你可以让 Django 假装迁移已完成:
python manage.py migrate your_app_name --fake
这不会真正修改数据库,只是记录迁移已完成。