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
imsite = 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist, wenn Sie festlegen, dass eine
related_name
auf die `ForeignKey ?Ich versuchte es auf einem anderen Projekt, und es funktioniert wie axpected:
Wenn Sie nicht setzen eine
related_name
ich denke, die Standardeinstellung ist<model>_set
. So sollte es seinpage_set
.FieldError: Cannot resolve keyword 'page' into field. Choices are: name, id, pages