Django添加PhoneNumberField后执行迁移报错AttributeError如何解决?
错误原因
你在Django模型层错误导入了表单专用的PhoneNumberField类。phonenumber_field模块针对模型层、表单层分别提供了不同的字段实现:你在models.py中导入的phonenumber_field.formfields.PhoneNumberField是仅用于表单的字段类,不具备Django模型字段必须的数据库映射、迁移逻辑相关属性(比如报错中提到的is_relation),因此执行迁移操作时会抛出属性不存在的错误。
解决步骤
- 第一步:修改
models.py的导入语句
将models.py中原有的导入代码:
替换为模型层专用的导入:from phonenumber_field.formfields import PhoneNumberFieldfrom phonenumber_field.modelfields import PhoneNumberField - 第二步:清理无效迁移文件
找到对应app下migrations目录中,之前执行makemigrations生成的、未同步到数据库的包含错误字段的迁移文件,直接删除即可。 - 第三步:重新执行迁移命令
依次运行以下命令完成数据库同步:python manage.py makemigrations python manage.py migrate
注:你
forms.py中导入phonenumber_field.formfields.PhoneNumberField的逻辑是正确的,表单层原本就需要使用表单专用的字段类,无需修改。
内容的提问来源于stack exchange,提问作者Houston Khanyile
相关产品推荐
相关产品推荐

