ValueError: Связанная модель u'app.model 'не может быть разрешена

У меня есть два приложения (ook и eek say), и я хочу использовать внешний ключ для модели в ook из модели в eek. Оба находятся в 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

Что я делаю неправильно?

Ответы

Ответ 1

Поскольку у вас есть ForeignKey в операциях, вы должны добавить ook в dependencies:

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

Миграции Django имеют два "волшебных" значения:

  • __first__ - получить первую миграцию модуля
  • __latest__ - получить последнюю версию модуля

Ответ 2

Я получил только ту же ошибку, но ссылаюсь на модель, объявленную как часть той же миграции. Оказалось, что первый migrations.CreateModel(...) относится к еще не объявленной модели. Я вручную переместил это под объявлением упомянутой модели, а затем все работало нормально.

Ответ 3

Я обнаружил, что эта ошибка не была исправлена, когда вы прокручиваете вниз.

Django ValueError: Связанная модель не может быть устранена Ошибка

Я использую 1.11.7, они говорят о 1.9.3.

Он работал на локальном хосте, но всегда терпел неудачу на Heroku, поэтому я тестировал все варианты/ответы выше, и ничего не работало.

Затем я заметил, localhost DB в Admin у меня было 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'),
        ),
    ]