web-dev-qa-db-fra.com

ValueError: le modèle associé u'app.model 'ne peut pas être résolu

J'ai deux applications (ook et eek say) et je souhaite utiliser une clé étrangère pour un modèle dans ook à partir d'un modèle dans eek Les deux sont dans INSTALLED_APPS avec ook en premier.

Dans ook.models.py, j'ai:

class Fubar(models.Model):
    ...

Dans eek.models.py, j'ai:

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

La migration générée est:

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

Lorsque j'exécute la migration, j'obtiens cette erreur:

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

Qu'est-ce que je fais mal?

25
Sardathrion

Comme vous avez ForeignKey dans les opérations, vous devez ajouter un ook à dependencies:

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

Les migrations Django ont deux valeurs "magiques":

  • __first__ - Obtenir la première migration du module
  • __latest__ - Obtenir la dernière migration du module
50
Tomasz Jakub Rup

Je viens de recevoir la même erreur, mais en faisant référence à un modèle déclaré dans le cadre de la même migration. Il s'est avéré que la première migrations.CreateModel(...) faisait référence à un modèle non encore déclaré. J'ai déplacé manuellement ceci en dessous de la déclaration du modèle référé, puis tout a bien fonctionné.

4
decibyte

J'ai rencontré cette erreur en essayant d'utiliser un modèle enfant d'un modèle de base en tant que clé étrangère. Cela a du sens que cela n'a pas fonctionné car il n'y a pas de champ id sur le modèle enfant. Mon correctif était d'utiliser le parent sur la clé. Malheureusement, cela n’a pas été intuitif et m’a pris quelques heures en arrière. 

0
Braden Holt

J'ai trouvé qu'il semblerait que ce bogue n'ait pas encore été corrigé lorsque vous faites défiler l'écran vers le bas.

Django ValueError: les modèles associés ne peuvent pas être résolus. Bug

J'utilise 1.11.7, ils parlent de 1.9.3. 

Tout fonctionnait sur localhost, mais échouait toujours sur Heroku. J'ai donc testé toutes les options/réponses ci-dessus et rien n'a fonctionné. 

Ensuite, j'ai remarqué: localhost DB dans Admin, j'avais 1 profil créé (1 enregistrement de base de données), est allé à Heroku et la base de données a 0 enregistrements pour la table Profile. D'ACCORD.

Cela confirme que je n'ai pas eu besoin de changer manuellement ces migrations pour que tout fonctionne. 

Cela aidera peut-être quelqu'un.

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'),
        ),
    ]
0
Radek