2016-05-14 2 views
0

Migrieren zu neuen Django und ich erhalte diesen Fehler. Meine Modelle:Django -> Schlüsselwort Fehler kann nicht aufgelöst werden, aber Feld ist in Optionen in traceback

class TourRoute(models.Model): 
    tour = models.ForeignKey(Tour, verbose_name=_(u'tour'), db_index=True) 
    country = models.ForeignKey(Country, verbose_name=_(u'country'), 
           db_index=True) 

class Tour(models.Model): 
    category = models.ForeignKey(TourCategory, verbose_name=_(u'tour type'), 
          null=True, blank=True) 
    kind = models.ForeignKey(TourKind, verbose_name=_(u'tour kind'), null=True, 
          blank=True, default=1) 
    tour_class = models.ForeignKey(TourClass, verbose_name=_(u'class'), 
          null=True) 
    type = models.ForeignKey(TourType, verbose_name=_(u'tour type'), 
          null=True, blank=True) 
    ... 

Im views.py:

country_tours = Tour.objects.filter(tourroute__country__link=country.link) 

In Zurückverfolgungs django dieses Feld sehen (iraceback image): nicht Stichwort lösen können 'tourroute' in das Feld. Zur Auswahl stehen: accommodation_note, ... tourroute, ...

Ich versuche:

  • Zugabe related_name (tourroute in beiden Zurückverfolgungs Orte geändert Wert related_name) alle Tabellen
  • Drop und neue Datenbank erstellt auf MySQL/Postgersql
  • Änderung meiner django (Arbeit in einem anderen Projekt auf dem gleichen Server ohne diesen Fehler) ersetzen

nichts geholfen ...

Hilf mir bitte, bevor ich mein Gehirn brach.

P.S. sorry für mein Englisch

+0

Die Zurückverfolgungs sagt der Fehler in Zeile 153 der Vorlage ist. Bitte zeigen Sie diesen Teil Ihrer Vorlage an. – Alasdair

Antwort

0

Fehler gefunden - eine der Apps importiert übermäßig in Django

Danke für die Hilfe!

UPD: diese Stiche in der alten App-Version sind der Grund dieser Fehler:

options.Options._get_field = options.Options.get_field.im_func setattr(options.Options, 'get_field', get_field)

0

Es scheint ein _set fehlt, sollte zu sein sein:

country_tours = Tour.objects.filter(tourroute_set__country__link=country.link) 

Oder besser, einen ähnlichen Namen das Modell hinzufügen, um sie lesbarer zu machen

class TourRoute(models.Model): 
    tour = models.ForeignKey(Tour, verbose_name=_(u'tour'), 
          db_index=True, related_name='routes') 

So Sie können

country_tours = Tour.objects.filter(routes__country__link=country.link) 
+0

vor der Migration auf neue Django dieser Code hat funktioniert –

+0

Ich versuche es bereits - kein Ergebnis (siehe höher: "adding related_name (Tourroute geändert in beiden Traceback-Orte zu related_name Wert)"). Udding "_set" funktioniert auch nicht. In diesem Fall wäre mein treysbek nicht so seltsam (Tourroute ist in Auswahl) –

Verwandte Themen