Django 1.8 - FieldError: Nicht lösen können-Schlüsselwort in das Feld

Ich vor kurzem aufgerüstet von Django 1.6 zu Django 1.8. Wenn ich das getan habe, habe ich festgestellt, dass ich nicht mehr in der Lage zu tun, eine Suche zurück durch eine foreign key-Beziehung, wie Sie beschrieben in:
https://docs.djangoproject.com/en/1.8/topics/db/queries/#lookups-that-span-relationships.

Das system so eingerichtet ist, dass es zwei Projekte, die dieselbe Datenbank verwenden. (Nicht meine Idee, aber nicht etwas, das würde ich gerne ändern, gerade jetzt.) Das Projekt, in dem die Modelle wurden ursprünglich erstellt und migriert funktioniert nach der Aktualisierung, aber die andere nicht. Die Modelle, die Datei für jeden identisch ist.

Models.py:

class Site(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        app_label = 'project1'

class Page(models.Model):
    title = models.CharField(max_length=255)
    site = models.ForeignKey('Site')

    class Meta:
        app_label = 'project1'

Error traceback aus dem Django-Shell:

>>> x = models.Site.objects.filter(page__id=1000)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 679, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/query.py", line 697, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1314, in add_q
    clause, require_inner = self._add_q(where_part, self.used_aliases)
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1342, in _add_q
    allow_joins=allow_joins, split_subq=split_subq,
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1154, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1035, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
  File "/home/user_name/project2/venv/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1401, in names_to_path
    "Choices are: %s" % (name, ", ".join(available)))
FieldError: Cannot resolve keyword 'page' into field. Choices are: name, id

In das erste Projekt, die gleiche Abfrage wie erwartet funktioniert:

>>> x = models.Site.objects.filter(page__id=1000)
[<Site: http://stackoverflow.com>]
  • ist, dass die full traceback? Beide Projekte haben die gleichen Django ' s version?
  • Mit der vollen traceback. Beide Projekte sind Django 1.8.3
  • legen Sie eine related_name im site = models.ForeignKey('Site', related_name='pages') tun und die Abfrage verwenden. Docs hier
  • Sind diese Modelle in der gleichen app?
  • Die Modelle sind in der gleichen app.
InformationsquelleAutor TheCaptan | 2015-08-06
Schreibe einen Kommentar