ValueError: 无法解析相关模型 u'app.model'
Posted
技术标签:
【中文标题】ValueError: 无法解析相关模型 u\'app.model\'【英文标题】:ValueError: Related model u'app.model' cannot be resolvedValueError: 无法解析相关模型 u'app.model' 【发布时间】:2016-02-03 10:35:06 【问题描述】:我有两个应用程序(ook
和 eek
说),我想从 eek
中的模型使用外键到 ook
中的模型。两者都在INSTALLED_APPS
中,ook
首先。
在ook.models.py
,我有:
class Fubar(models.Model):
...
在eek.models.py
,我有:
class monkey(models.Model):
external = models.ForeignKey('ook.Fubar', blank=True, null=True)
...
生成的迁移是:
class Migration(migrations.Migration):
dependencies = [
('eek', '0002_auto_20151029_1040'),
]
operations = [
migrations.AlterField(
model_name='monkey',
name='external',
field=models.ForeignKey(blank=True, to='ook.Fubar', null=True),
),
]
当我运行迁移时,我收到此错误:
...
1595 raise ValueError('Foreign Object from and to fields must be
the same non-zero length')
1596 if isinstance(self.rel.to, six.string_types):
-> 1597 raise ValueError('Related model %r cannot be resolved' % self.rel.to)
1598 related_fields = []
1599 for index in range(len(self.from_fields)):
ValueError: Related model u'ook.Fubar' cannot be resolved
我做错了什么?
【问题讨论】:
ook
和 eek
是否包含在 INSTALLED_APPS
中的 settings.py
中?
@Leistungsabfall:是的,他们是,ook
在 eek
之前。
'ook.models.Foobar' 也许?
@cdvv7788:因为我在ook
上将Fubar
添加到顶部__init__.py
,所以没有任何区别。
【参考方案1】:
因为你有ForeignKey
在操作,你必须在dependencies
中添加一个ook
:
dependencies = [
('ook', '__first__'),
('eek', '0002_auto_20151029_1040'),
]
Django 迁移有两个“神奇”值:
__first__
- 获取模块第一次迁移
__latest__
- 获取模块最新迁移
【讨论】:
“first”是什么意思?我有同样的问题,但它不适合我 first 表示找到最初创建该“模型”的应用程序,找到它.. 为什么没有自动生成? @Sören 这可能是错误。migrations.AlterField
on ForeignKey
不要生成 dependencies
(在 1.11.4 上测试)【参考方案2】:
我刚刚遇到同样的错误,但指的是一个被声明为同一迁移的一部分的模型。原来,第一个migrations.CreateModel(...)
指的是一个尚未声明的模型。我手动将其移至引用模型的声明下方,然后一切正常。
【讨论】:
【参考方案3】:当您向下滚动到底部时,我发现此错误似乎尚未修复。
Django ValueError: Related model cannot be resolved Bug
我使用的是 1.11.7,他们说的是 1.9.3。
它在 localhost 上一切正常,但在 Heroku 上总是失败,所以我测试了上面的所有选项/答案,但没有任何效果。
然后我注意到,Admin 中的 localhost DB 我创建了 1 个配置文件(1 个 DB 记录),转到 Heroku 并且 DB 有 0 个配置文件表记录,所以我添加了 1 个,推送迁移,python manage.py migrate 和一切顺利。
这验证了我不需要手动更改任何迁移,一切正常。
也许它会对某人有所帮助。
迁移
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-11-23 21:26
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('blog', '0005_blog_author'),
]
operations = [
migrations.AlterField(
model_name='blog',
name='author',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
to='core.Profile'),
),
]
【讨论】:
【参考方案4】:我在尝试使用基础模型的子模型作为外键时遇到了这个错误。它不起作用是有道理的,因为子模型上没有 id 字段。我的解决方法是在密钥上使用父级。不幸的是,这并没有立即直观,让我倒退了几个小时。
【讨论】:
【参考方案5】:尝试为每个模型一个一个地运行迁移。
这样你就可以调试你遇到问题的app
python manage.py migrate appmname
【讨论】:
【参考方案6】:在我的例子中,是缓存和以前的迁移导致了这个错误。我删除了__pycache__
和迁移文件夹,然后重新运行迁移命令并且它工作了。
请记住,当您执行 python manage.py makemigrations
时,它不会看到任何新的迁移,而是控制台输出 no changes detected
。您必须改为 python manage.py makemigrations your_app_name
才能使事情正常进行。
【讨论】:
这对我来说是最快的解决方案【参考方案7】:dependencies
的顺序太重要了。
在您的情况下,必须先创建ook
,然后再依赖eek
。
dependencies= [
('ook', '0001_initial'),
('eek', '0002_auto_20151029_1040'),
]
【讨论】:
以上是关于ValueError: 无法解析相关模型 u'app.model'的主要内容,如果未能解决你的问题,请参考以下文章
ValueError: 运行测试时无法解析相关模型 u'app.model'
Django:无法解析相关模型“users.UserProfile”
尝试连接 keras 模型:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)