Django 1.8 - FieldError: Impossible de résoudre le mot-clé dans le champ
J'ai récemment mis à niveau à partir de Django 1.6 à Django 1.8. Quand je l'ai fait, j'ai trouvé que je n'étais plus en mesure de faire une recherche en arrière à travers une relation de clé étrangère comme décrit dans:
https://docs.djangoproject.com/en/1.8/topics/db/queries/#lookups-that-span-relationships.
Le système est configuré de sorte qu'il y a deux projets qui utilisent la même base de données. (Pas mon idée, mais pas quelque chose que je voudrais changer maintenant.) Le projet, où les modèles ont été initialement créés et ont migré fonctionne très bien après la mise à niveau, mais l'autre n'a pas. Les modèles de fichier pour chacun d'eux est identique.
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'
Erreur de retraçage de l'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
Dans le premier projet, la même requête fonctionne comme prévu:
>>> x = models.Site.objects.filter(page__id=1000)
[<Site: http://stackoverflow.com>]
C'est la pleine de sperme. Les deux projets sont Django 1.8.3
définir un
related_name
dans site = models.ForeignKey('Site', related_name='pages')
et faire la requête à l'aide. Docs iciCes modèles dans la même application?
Les modèles sont dans la même application.
OriginalL'auteur TheCaptan | 2015-08-06
Vous devez vous connecter pour publier un commentaire.
Que si vous définissez un
related_name
sur le " ForeignKey ?Je l'ai essayé sur un autre projet et il fonctionne comme axpected:
Si vous ne définissez pas un
related_name
, je pense que la valeur par défaut est<model>_set
. Il devrait donc êtrepage_set
.FieldError: Cannot resolve keyword 'page' into field. Choices are: name, id, pages
Alors, quand j'ai écrit mon commentaire, j'avais oublié de faire les migrations. Qu'il fixe. Merci!
OriginalL'auteur Eliot Berriot