Django3执行migrate时报'str'对象无_meta属性问题求助
错误原因
该AttributeError: 'str' object has no attribute '_meta'报错的核心是Django在处理多对多字段的自定义中间表时,尝试读取中间表模型的_meta属性,但此时拿到的是未解析的字符串值而非模型类,导致属性不存在。结合你提供的迁移文件,有两个明确的触发点:
- 迁移依赖顺序错误:你在用户模型中添加指定
through='account.Contact'的多对多字段的迁移,排在了创建Contact模型的迁移之前。Django先执行加字段的迁移时,Contact模型还未注册,through参数的字符串无法被解析为模型类。 - 拼写错误:当前迁移的依赖项中写的是
('account', '0005_contant'),contant为拼写错误,正确应为contact,会导致Django找不到正确的前置迁移,模型加载顺序混乱。
解决步骤
- 先删除account应用migrations目录下所有序号≥0005的迁移文件,注意不要删除目录下的
__init__.py文件。 - 检查models.py代码:
确认Contact模型定义正确,同时确认用户模型的多对多字段的through参数拼写正确,示例写法参考:following = models.ManyToManyField('self', through='Contact', related_name='followers', symmetrical=False) - 确认生产配置文件
educa/settings/pro.py中已经正确注册account应用,且AUTH_USER_MODEL配置无误。 - 重新生成迁移文件:
python manage.py makemigrations --settings=educa.settings.pro - 重新执行迁移:
python manage.py migrate --settings=educa.settings.pro
内容的提问来源于stack exchange,提问作者FakeJavano
相关产品推荐
相关产品推荐

