J'ai une application django avec des modèles comme suit:filtre Django avec deux contraintes sur le modèle lié
Un modèle
Question
Un modèle
Answer
, avec un ForeignKey revenir à la question. (Une question peut avoir plusieurs réponses .)Un modèle
Flag
, avec un ForeignKey à la réponse. (Une réponse peut être signalé comme inapproprié .)
Tout ce qui précède ont aussi un champ user
, définissant l'utilisateur qui a créé cet objet.
J'essaie d'obtenir une liste de toutes les questions avec les réponses de l'utilisateur actuel qui ont été marquées. J'ai essayé ceci:
Question.objects.filter(answer__user=user).\
filter(answer__flag__isnull=False).distinct()
... mais je pense que cela va retourner une liste de questions avec des réponses de l'utilisateur actuel et avec des réponses qui ont été signalées, mais garantira pas nécessairement qu'il est la réponse de l'utilisateur qui a été marqué.
est-il un moyen facile de le faire? Fondamentalement, je veux faire la partie answer
du filtre se référer à la même réponse sur les deux.
Veuillez me faire savoir si quelque chose n'est pas clair.
Je ne suis pas sûr de comprendre. Le premier filtre me donnera un ensemble de toutes les questions avec au moins une réponse de cet utilisateur. Ensuite, le deuxième filtre renverra des questions correspondant à ces critères qui ont une réponse signalée. Mais si la question Q1 a les réponses A1 et A2 des utilisateurs U1 et U2, respectivement, et que A2 est marqué, cette requête ne retournera-t-elle pas Q1 pour U1 et U2? Et oui, vous avez absolument raison sur isnull = False; Je vais arranger ça. –
Aha. Il s'avère que si je les mets tous les deux dans le même appel de filtre, alors il fera ce que je veux. (Voir http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships pour plus d'informations.) –
Juste en notant, selon les docs, cela ne fonctionne pas le même chose pour '.exclude()' –