django左外部联接筛选器不匹配记录

django左外部联接筛选器不匹配记录,django,Django,我们的目标是找出一个调查回答是否没有所有顶级问题的最新答案 这可以通过获取回答的所有顶级问题,然后过滤掉没有当前答案的问题来实现 我可以用SQL编写,但是有没有一种方法可以用django的QuerySet接口实现呢 模型 类别调查模型: ... 类SurveySectionModel: 调查=国外调查,相关的调查部分 班级调查问卷模型: 调查部分=国外调查部分,相关的调查问题 parent=ForeignKey“self”问题可以嵌套 class SurveyResponseModel: 调查=

我们的目标是找出一个调查回答是否没有所有顶级问题的最新答案

这可以通过获取回答的所有顶级问题,然后过滤掉没有当前答案的问题来实现

我可以用SQL编写,但是有没有一种方法可以用django的QuerySet接口实现呢

模型

类别调查模型: ... 类SurveySectionModel: 调查=国外调查,相关的调查部分 班级调查问卷模型: 调查部分=国外调查部分,相关的调查问题 parent=ForeignKey“self”问题可以嵌套 class SurveyResponseModel: 调查=国外调查,相关的\u name='survey\u回复' 类别调查和SwerModel: 调查\答复=国外调查\答复,相关\调查\答复' 调查\问题=ForeignKeySurveyQuestion,相关的\u name='survey\答案' is_current=布尔字段 SQL

这应该可以找到调查的所有顶级问题,获得与这些问题匹配的当前答案,并删除没有答案的问题

从调查中选择*调查问题 在section.id=question.survey\u section\u id上加入survey\u survey部分 在survey.id=section.survey\u id上加入测量 加入survey\u surveyresponse对response.survey\u id=survey.id的响应 左侧外部连接调查\u调查并回答answer.survey\u question\u id=question.id和answer.is\u current=true 其中response.id=16 而answer.id为空 而question.parent为空
您可以采取以下方法:

首先,获取父项为空的问题数:

top_question_count = SurveyQuestion.objects.filter(parent__is_null=True).count()
然后,在过滤器中使用它:

from django.db.models imprt Count

SurveyResponse.objects.filter(
    survey_answers__survey_question__parent__is_null=True,
    is_current=True
).annotate(
    top_level_questions=Count('survey_answers__survey_question')
).filter(
    top_level_questions=top_question_count
)

我不清楚,如何确定调查答案是对还是错?@ruddra没有必要确定答案是对还是错。对于我们正在查找的一组问题,我们只关心答案是否为“当前”为“当前”\u current=True。抱歉@ruddra代码缺失字段为“当前”-我刚刚编辑了该问题并将其添加到中。如果我理解正确,顶部问题计数现在应该在父级上进行筛选,它将计算所有问题?此外,SurveyResponse应该过滤SurveyAnswer上的当前值?但我明白这是怎么回事,它确实回答了这个问题。在一个附带问题上,如果一个问题可能有多个答案,有没有办法获得调查答案的唯一问题id计数?@richflow opps。如果父项为空,则应为空。更新了我的答案