Django3.2.4生成迁移报错:module 'django.db.models' has no attribute 'RESTRICT'
报错原因
- 核心原因是
models.RESTRICT是Django 3.1版本才正式加入的内置外键约束选项,低于该版本的Django没有对应属性,会抛出找不到属性的报错。 - 即便你标注本地安装的是Django 3.2.4,大概率是当前项目运行的实际Django版本低于3.1:常见场景包括未激活项目对应的虚拟环境、全局安装的低版本Django优先级高于虚拟环境、多Python版本共存导致调用了其他版本下的低版本Django。
- 小概率场景为导入错误:模型文件中导入的
models不是官方的django.db.models,而是自定义的同名模块,覆盖了官方模块导致找不到对应属性。
解决方法
- 首先确认当前执行命令的环境Django版本,运行如下命令:
如果输出版本低于3.1,直接升级当前环境的Django到对应版本即可:python -m django --versionpip install --upgrade django==3.2.4 - 若确认版本确实为3.2.4,检查模型文件开头的导入语句,确保导入语句为
from django.db import models,没有导入本地自定义的同名models模块。 - 临时兼容方案:如果暂时无法升级Django版本,可以使用
PROTECT替代RESTRICT,二者功能几乎一致,仅事务内错误抛出的时机有细微差异,绝大多数业务场景下表现完全相同。
内容的提问来源于stack exchange,提问作者zacho610
相关产品推荐
相关产品推荐

