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?
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 moduleJe 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é.
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.
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'),
),
]