Comment filtrer/rejoindre un Haystack SearchQuerySet par des champs de modèles liés?Comment filtrer Haystack SearchQuerySets par modèles connexes
J'ai une requête comme:
sqs = SearchQuerySet().models(models.Person)
et cela renvoie les mêmes résultats que l'équivalent retourne page d'administration.
Cependant, si je tente et filtrer par les enregistrements des modèles liés par une clé étrangère:
sqs = sqs.filter(workplace__role__name='teacher')
il ne renvoie rien, même si la page /admin/myapp/person/?workplace__role__name=teacher
revient plusieurs enregistrements.
Je ne souhaite effectuer aucune recherche de texte intégral sur ces modèles associés. Je veux seulement faire un simple filtre exact. Est-ce possible avec Haystack?
Votre exemple spécifique n'a pas de sens, car le lien personne-> lieu de travail est une relation un-à-plusieurs. – Cerin
Eh bien, c'est ainsi que fonctionnent ces moteurs de recherche ... D'un autre côté, l'accès à ces informations dénormalisées est très rapide car vous n'avez pas besoin d'effectuer d'autres recherches/jointures pour y accéder. Si vous évitez de cliquer sur votre base de données lors de l'affichage des résultats de recherche, vous pouvez avoir un grand avantage de performance ... Voir aussi http://django-haystack.readthedocs.org/en/latest/best_practices.html#avoid-hitting-the- base de données –
Ne connaissez pas votre disposition exacte des données ... Vous pouvez faire la même chose que ci-dessus avec une relation un à plusieurs, en utilisant 'MultiValueField' de haystack qui peut contenir une liste (et que vous pouvez filtrer pour des valeurs uniques). Voir cet article https://gist.github.com/cooncesean/2892533 –