ValueError:相关模型u'app.model'无法解析

Sar*_*ica 31 django django-models django-migrations

我有两个应用程序(ook并且eek说),我想ook从模型中使用外键到模型eek.两者都是在INSTALLED_APPSook第一位.

ook.models.py,我有:

class Fubar(models.Model):
    ...
Run Code Online (Sandbox Code Playgroud)

eek.models.py,我有:

class monkey(models.Model):
    external = models.ForeignKey('ook.Fubar', blank=True, null=True)
    ...
Run Code Online (Sandbox Code Playgroud)

生成的迁移是:

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),
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

当我运行迁移时,我收到此错误:

   ...
   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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Tom*_*Rup 60

因为您ForeignKey在操作中,您必须添加ookdependencies:

dependencies = [
    ('ook', '__first__'),
    ('eek', '0002_auto_20151029_1040'),
]
Run Code Online (Sandbox Code Playgroud)

Django迁移有两个"神奇"值:

  • __first__ - 获取模块首次迁移
  • __latest__ - 获取模块最新迁移


Bhu*_*ney 7

尝试为每个模型一个一个地运行迁移。

这样,您可以调试app您面临的问题

python manage.py migrate appmname
Run Code Online (Sandbox Code Playgroud)


Muj*_*que 7

就我而言,是缓存和之前的迁移导致了此错误。我删除了__pycache__迁移文件夹,然后重新运行迁移命令,它起作用了。

请记住,当您执行python manage.py makemigrations此操作时,它不会看到任何新的迁移,并且会控制台输出no changes detected。你必须采取python manage.py makemigrations your_app_name行动才能让事情顺利进行。


dec*_*yte 6

我只是遇到了相同的错误,但是引用的是声明为同一迁移的一部分的模型。事实证明,第一个migrations.CreateModel(...)引用了一个尚未声明的模型。我手动将其移至引用模型的声明下方,然后一切正常。