2015-11-03 12 views
15

Ho due applicazioni (ook e eek dicono) e voglio usare una chiave esterna ad un modello in ook da un modello in eek. Entrambi sono in INSTALLED_APPS con ook prima.ValueError: Related modello u'app.model' non può essere risolto

In ook.models.py, ho:

class Fubar(models.Model): 
    ... 

In eek.models.py, ho: generato

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

La migrazione è:

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

Quando eseguo la migrazione, ottengo questo errore:

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

Cosa sto sbagliando?

+0

sono '' ook' e eek' inclusi in 'INSTALLED_APPS' in' settings.py'? – Leistungsabfall

+0

@Leistungsabfall: Sì, lo sono e 'ook' è prima di' eek'. – Sardathrion

+0

'ook.models.Foobar' forse? – cdvv7788

risposta

32

perché avete ForeignKey nelle operazioni, è necessario aggiungere un ook a dependencies:

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

Django migrazioni avere due valori "magici":

  • __first__ - ottenere il modulo di prima migrazione
  • __latest__ - get modulo ultima migrazione
+0

cosa significa "__prima__"? Ho lo stesso problema ma non funziona per me –

+1

@ Harun-Ur-Rashid vedi la mia modifica –

+0

Oh, molte molte grazie @Tomasz. __latest__ funziona per me –

4

Ho appena ricevuto lo stesso errore, ma facendo riferimento a un modello dichiarato come parte della stessa migrazione. Si è scoperto che il primo migrations.CreateModel(...) si riferiva a un modello non ancora dichiarato. Ho spostato manualmente questo sotto la dichiarazione del modello di riferimento e poi tutto ha funzionato bene.

0

Ho scoperto che sembra che questo errore non sia stato ancora risolto quando si scorre verso il basso.

Django ValueError: Related model cannot be resolved Bug

Sto usando 1.11.7, stanno parlando 1.9.3.

Ha funzionato tutto su localhost, ma ha sempre fallito su Heroku, quindi ho testato tutte le opzioni/risposte sopra e niente ha funzionato.

Quindi ho notato, localhost DB in Admin ho avuto 1 profilo creato (1 record DB), andato a Heroku e DB ha 0 record per la tabella profilo quindi ho aggiunto 1, spinto la migrazione, python manage.py migrare e tutto è andato bene.

Ciò conferma che non è stato necessario modificare manualmente nessuna di tali migrazioni.

Forse aiuterà qualcuno.

migrazioni

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