J'ai une paire de modèles Django avec une clé étrangère, dont l'un est consultable avec django-FTS, dire:clé étrangère inverse pour modèle django-FTS consultable dans le modèle
class Foo(models.Model):
...
class Bar(fts.SearchableModel):
foo = models.ForeignKey(Foo)
Quand j'ai une instance de Foo, en vue je peux insérer print foo.bar_set.all()
et je vois un tableau de résultats. Toutefois, si je tente de l'utiliser dans une vue, dans l'une des façons suivantes:
{{foo.bar_set|pprint}}
{{foo.bar_set.all|ppring}}
{{foo.bar_set.count}}
{{foo.bar_set.all|length}}
{% for bar in foo.bar_set.all %} {{bar}} {% endfor %}
et littéralement toute construction que je peux penser à se comporte comme si foo
instance avait pas bar_set
attribut.
Edit: Je suis sûr que j'ai une instance Foo
dans le modèle, je l'ai testé suivant pour fonctionner comme prévu:
{{foo|pprint}}
{{foo.id}} (and any other simple attributes of Foo)
Je suis sûr qu'il ya des objets de bar connexes, je vérifie que la vue (print foo.bar_set.all()
). Et si le QuerySet était vide, {{foo.bar_set.all|pprint}}
donnerait []
, et non ''
(ce qui est le cas pour {{foo.bar_set.all|pprint}}
, {{foo.bar_set|pprint}}
et {{foo.nonexistent_attribute|pprint}}
).
Ce comportement a commencé lorsque j'ai déplacé le développement de la base de données SQLite vers PostgreSQL, avec le pilote psycopg2, pour utiliser la recherche de texte intégral django-fts.
Je n'ai pas trouvé d'autre réponse, car googler c'est très difficile: "reverse relation" ou "reverse foreign key" est jonché de django.core.urlresolvers.reverse
références sans rapport, et je ne sais pas comment nommer "* _set" chose à Google Un indice sur la façon de google celui-ci serait utile aussi.
J'ai une instance de Foo ({{foo | pprint}} fonctionne, j'ai vérifié cela), et tous les attributs simples (comme {{foo.id}}) fonctionnent. Il existe une relation et des objets Bar connexes, que je teste en lançant print foo.bar_set.all() à partir de la vue avant de rendre le modèle. –
Hmm, impair. Pouvez-vous poster votre code d'affichage? –
J'ai trouvé ceci, c'était une interaction avec django-fts (je sais que je n'ai pas mentionné cela dans la première version du texte de la question, je ne pensais pas que c'était la cause). Voir ma réponse pour une explication détaillée. –