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

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

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


person Sardathrion - against SE abuse    schedule 03.11.2015    source источник
comment
Включены ли ook и eek в INSTALLED_APPS в settings.py?   -  person Leistungsabfall    schedule 03.11.2015
comment
@Leistungsabfall: Да, и ook перед eek.   -  person Sardathrion - against SE abuse    schedule 03.11.2015
comment
'ook.models.Foobar' может быть?   -  person cdvv7788    schedule 03.11.2015
comment
@cdvv7788: Это не имело бы никакого значения, так как я добавил Fubar вверху __init__.py на ook.   -  person Sardathrion - against SE abuse    schedule 03.11.2015


Ответы (6)


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

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

Миграции Django имеют два «магических» значения:

  • __first__ - получить первую миграцию модуля
  • __latest__ - получить последнюю миграцию модуля
person Tomasz Jakub Rup    schedule 03.11.2015
comment
что означает «первый»? У меня такая же проблема, но у меня не работает - person Harun-Ur-Rashid; 23.08.2017
comment
сначала означает найти приложение, в котором изначально была создана эта модель, найти его. - person Brian Sanchez; 16.08.2018
comment
Почему это не генерируется автоматически? - person Sören; 29.04.2021
comment
@Sören Это, наверное, ошибка. migrations.AlterField на ForeignKey не генерировать dependencies (проверено на 1.11.4) - person Tomasz Jakub Rup; 16.06.2021

Попробуйте запускать миграции одну за другой для каждой модели.

Таким образом, вы можете отладить app, с которым вы столкнулись.

python manage.py migrate appmname
person Bhupesh Varshney    schedule 03.04.2019

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

person decibyte    schedule 02.04.2016

В моем случае это был кеш и предыдущие миграции, которые привели к этой ошибке. Я удалил папку __pycache__ и миграции, а затем повторно запустил команду миграции, и это сработало.

Помните, когда вы сделаете python manage.py makemigrations, он не увидит никаких новых миграций и выведет на консоль вывод no changes detected. Вместо этого вам придется сделать python manage.py makemigrations your_app_name, чтобы все заработало.

person Mujeeb Ishaque    schedule 24.10.2020
comment
это самое быстрое решение для меня - person Macumbaomuerte; 12.07.2021

Я столкнулся с этой ошибкой при попытке использовать дочернюю модель базовой модели в качестве внешнего ключа. Логично, что это не сработало, потому что в дочерней модели нет поля id. Мое исправление состояло в том, чтобы использовать родителя на ключе. К сожалению, это не было интуитивно понятным и отбросило меня на пару часов назад.

person Braden Holt    schedule 29.08.2018

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

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

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

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

Затем я заметил, что в БД localhost в Admin у меня был создан 1 профиль (1 запись БД), перешел в Heroku, а в БД 0 записей для таблицы профилей, поэтому я добавил 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'),
        ),
    ]
person Radek    schedule 23.11.2017