ValueError: Related model u'app.model' cannot be resolved

北战南征 提交于 2020-04-07 16:59:28

问题


I have two applications (ook and eek say) and I want to use a foreign key to a model in ook from a model in eek. Both are in INSTALLED_APPS with ook first.

In ook.models.py, i have:

class Fubar(models.Model):
    ...

In eek.models.py, I have:

class monkey(models.Model):
    external = models.ForeignKey('ook.Fubar', blank=True, null=True)
    ...

The migration generated is:

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),
        ),
    ]

When I run the migration, I get this error:

   ...
   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

What am I doing wrong?


回答1:


Because You have ForeignKey in operations, You must add a ook to dependencies:

dependencies = [
    ('ook', '__first__'),
    ('eek', '0002_auto_20151029_1040'),
]

Django migrations have two "magic" values:

  • __first__ - get module first migration
  • __latest__ - get module latest migration



回答2:


Try running migrations one by one for every model.

This way you can debug the app you are facing problem with

python manage.py migrate appmname



回答3:


I just got the same error, but referring to a model that was declared as part of the same migration. It turned out that the first migrations.CreateModel(...) referred to a not yet declared model. I manually moved this below the declaration of the referred model and then everything worked fine.




回答4:


I have found that it looks like this bug was not fixed yet when you scroll down to the bottom.

Django ValueError: Related model cannot be resolved Bug

I am using 1.11.7, they are talking about 1.9.3.

It worked everything on localhost, but was always failing on Heroku, so I tested all the options/answers above and nothing worked.

Then I have noticed, localhost DB in Admin I had 1 profile created (1 DB record), went to Heroku and DB has 0 records for Profile table so I have added 1, pushed the migration, python manage.py migrate and all it went OK.

That validates that I did not need to change any of those migrations manually that all is working.

Maybe it will help to someone.

migrations

# -*- 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'),
        ),
    ]



回答5:


I encountered this error when trying to use a child model of a base model as a foreign key. It makes sense that it didn't work because there's not an id field on the child model. My fix was to use the parent on the key. Unfortunately this was not immediately intuitive and set me back a couple hours.



来源:https://stackoverflow.com/questions/33496333/valueerror-related-model-uapp-model-cannot-be-resolved

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!