首页 > 解决方案 > Django Querysets - 包括多对多中的整个集合的对象

问题描述

我有一个模型,通过名为 的字段Respondent与另一个模型相关。QuestionnaireManyToManyfinished

我有一组四个Questionnaire对象,并想检索与这四个Respondent对象有finished关系的所有对象。

我还想检索逆向:任何与所有四个选定对象Respondent都没有关系的对象。finishedQuestionnaire

我一直在浏览文档,但没有找到适合我的东西。我能够获得Respondent与至少其中一个对象匹配的所有Questionnaire对象,Respondent.objects.filter(finished__in=questionnaire_queryset)但这就是我所获得的。

标签: djangodjango-queryset

解决方案


您可以计算 中的finished对象数量questionnaire_queryset,例如:

从 django.db.models 导入计数

Respondent.objects.filter(
    finished__in=questionnaire_queryset
).annotate(
    nfinish=Count('finished')
).filter(
    nfinish=len(questionnaire_queryset)
)

我们在这里做一个不questionnaire_queryset包含任何重复的假设。


推荐阅读