ValueError: Related model u'app.model' cannot be resolved
ValueError: Related model u'app.model' cannot be resolved
我有两个应用程序(例如 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
我做错了什么?
因为你有ForeignKey
在操作中,你必须添加一个ook
到dependencies
:
dependencies = [
('ook', '__first__'),
('eek', '0002_auto_20151029_1040'),
]
Django 迁移有两个 "magic" 值:
__first__
- 获取模块第一次迁移
__latest__
- 获取模块最新迁移
我刚遇到同样的错误,但引用了一个声明为同一迁移一部分的模型。原来第一个 migrations.CreateModel(...)
指的是一个尚未声明的模型。我手动将其移动到引用模型的声明下方,然后一切正常。
当你向下滚动到底部时,我发现这个错误似乎还没有修复。
Django ValueError: Related model cannot be resolved Bug
我用的是1.11.7,他们说的是1.9.3。
它在本地主机上一切正常,但在 Heroku 上总是失败,所以我测试了上面的所有 options/answers,但没有任何效果。
然后我注意到,管理员中的本地主机数据库我创建了 1 个配置文件(1 个数据库记录),转到 Heroku 并且数据库有 0 个配置文件记录 table 所以我添加了 1 个,推动了迁移, python manage.py 迁移,一切顺利。
这证实我不需要手动更改任何迁移,一切正常。
也许对某人有帮助。
迁移
# -*- 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'),
),
]
我在尝试将基本模型的子模型用作外键时遇到此错误。它不起作用是有道理的,因为子模型上没有 id 字段。我的解决方法是在密钥上使用父级。不幸的是,这不是很直观,让我耽搁了几个小时。
尝试 运行 对每个模型逐一迁移。
通过这种方式,您可以调试 app
您遇到的
问题
python manage.py migrate appmname
在我的例子中,是缓存和之前的迁移导致了这个错误。我删除了 __pycache__
和迁移文件夹,然后删除了 re-run 迁移命令,它起作用了。
请记住,当您执行 python manage.py makemigrations
时,它不会看到任何新的迁移,并将控制台输出 no changes detected
。您必须执行 python manage.py makemigrations your_app_name
才能使事情正常进行。
dependencies
的顺序太重要了。
在您的情况下,必须先创建 ook
然后依赖 eek
。
dependencies= [
('ook', '0001_initial'),
('eek', '0002_auto_20151029_1040'),
]
我有两个应用程序(例如 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
我做错了什么?
因为你有ForeignKey
在操作中,你必须添加一个ook
到dependencies
:
dependencies = [
('ook', '__first__'),
('eek', '0002_auto_20151029_1040'),
]
Django 迁移有两个 "magic" 值:
__first__
- 获取模块第一次迁移__latest__
- 获取模块最新迁移
我刚遇到同样的错误,但引用了一个声明为同一迁移一部分的模型。原来第一个 migrations.CreateModel(...)
指的是一个尚未声明的模型。我手动将其移动到引用模型的声明下方,然后一切正常。
当你向下滚动到底部时,我发现这个错误似乎还没有修复。
Django ValueError: Related model cannot be resolved Bug
我用的是1.11.7,他们说的是1.9.3。
它在本地主机上一切正常,但在 Heroku 上总是失败,所以我测试了上面的所有 options/answers,但没有任何效果。
然后我注意到,管理员中的本地主机数据库我创建了 1 个配置文件(1 个数据库记录),转到 Heroku 并且数据库有 0 个配置文件记录 table 所以我添加了 1 个,推动了迁移, python manage.py 迁移,一切顺利。
这证实我不需要手动更改任何迁移,一切正常。
也许对某人有帮助。
迁移
# -*- 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'),
),
]
我在尝试将基本模型的子模型用作外键时遇到此错误。它不起作用是有道理的,因为子模型上没有 id 字段。我的解决方法是在密钥上使用父级。不幸的是,这不是很直观,让我耽搁了几个小时。
尝试 运行 对每个模型逐一迁移。
通过这种方式,您可以调试 app
您遇到的
python manage.py migrate appmname
在我的例子中,是缓存和之前的迁移导致了这个错误。我删除了 __pycache__
和迁移文件夹,然后删除了 re-run 迁移命令,它起作用了。
请记住,当您执行 python manage.py makemigrations
时,它不会看到任何新的迁移,并将控制台输出 no changes detected
。您必须执行 python manage.py makemigrations your_app_name
才能使事情正常进行。
dependencies
的顺序太重要了。
在您的情况下,必须先创建 ook
然后依赖 eek
。
dependencies= [
('ook', '0001_initial'),
('eek', '0002_auto_20151029_1040'),
]