Django-Oscar删除订单报错:main.customer_communicationeventtype表不存在
解决Django-Oscar删除订单时出现的
customer_communicationeventtype表不存在错误 问题回顾
你基于Django-Oscar沙盒搭建电商应用,仅添加产品未修改核心代码,测试订单失败但生成了订单对象,在django-admin删除该订单时触发错误:
django.db.utils.OperationalError: no such table: main.customer_communicationeventtype
环境:Django v3.0.9,SQLite3数据库。
问题原因
这个customer_communicationeventtype表是Django-Oscar的customer模块负责创建的,出现错误通常是因为该模块的数据库迁移未被正确执行,导致表未生成。当删除订单时,Oscar的关联删除逻辑尝试访问这个缺失的表,就会抛出找不到表的异常。
解决方案
按以下步骤操作修复:
确认
customer模块在INSTALLED_APPS中
打开项目的settings.py,检查INSTALLED_APPS是否包含oscar.apps.customer(沙盒默认已添加,但如果误删需要补回):INSTALLED_APPS = [ # 其他应用... 'oscar.apps.customer', # Oscar的其他模块... ]执行
customer模块的数据库迁移
在终端运行命令,专门针对customer模块执行迁移:python manage.py migrate customer若不确定哪些迁移未执行,也可以运行全量迁移:
python manage.py migrate开发环境下的重置方案(数据不重要时)
如果迁移仍有问题,且是开发环境(数据可丢弃),可以重置数据库后重新初始化:- 删除SQLite数据库文件(通常是
db.sqlite3) - 重新运行迁移和Oscar初始化命令:
python manage.py migrate python manage.py oscar_populate_countries python manage.py oscar_init_superuser
之后重新添加产品,再测试删除订单操作。
- 删除SQLite数据库文件(通常是
验证
迁移完成后,回到django-admin再次尝试删除订单对象,应该不会再出现找不到表的错误了。
内容的提问来源于stack exchange,提问作者pissall
相关产品推荐
相关产品推荐

