Django使用字符串引用模型报Invalid model reference错误的解决方法
错误原因
Django 要求字符串形式的模型引用必须遵循应用标签.模型类名的格式,不能写模型的完整Python导入路径。你当前写的dsi.administration.libraries.Library是完整导入路径,不符合规范所以触发报错。
解决步骤
- 先确认Library模型对应的应用标签
你可以直接在Django shell中执行以下代码获取准确的app_label:
from dsi.administration.libraries.models import Library print(Library._meta.app_label)
正常情况下,因为你在SHARED_APPS中注册的应用路径是dsi.administration.libraries,且没有自定义应用标签的话,输出结果会是libraries。
- 替换多对多字段的引用字符串
如果上一步得到的app_label是libraries,把你的字段定义修改为:
models.ManyToManyField("libraries.Library", verbose_name='library choices')
特殊场景处理
如果你的项目中存在多个结尾同名的应用(比如同时有dsi.a.libraries和dsi.b.libraries),需要手动给应用指定唯一标签,打开dsi/administration/libraries/apps.py,修改LibrariesConfig配置:
from django.apps import AppConfig class LibrariesConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'dsi.administration.libraries' # 自定义唯一的应用标签 label = 'administration_libraries'
之后引用的时候写"administration_libraries.Library"即可。
内容的提问来源于stack exchange,提问作者Ebolasudan
相关产品推荐
相关产品推荐

