Python Django:QuerySet过滤器不';I don’我没有按预期工作

Python Django:QuerySet过滤器不';I don’我没有按预期工作,python,django,Python,Django,我有以下查询集 from myapp.events.models import Event from myapp.surveys import QuestionFocus from django.conf import settings event = Event.objects.get(pk=12) survey = event.surveys.get( template=settings.SURVEY_POST_EVENT ).questions.filter( focus

我有以下查询集

from myapp.events.models import Event
from myapp.surveys import QuestionFocus
from django.conf import settings

event = Event.objects.get(pk=12)
survey = event.surveys.get(
    template=settings.SURVEY_POST_EVENT
).questions.filter(
    focus=QuestionFocus.RECOMMENDATION_TO_FRIENDS,
    answers__answer="9"
).prefetch_related("answers")

survey.first().answers.all()
现在我只希望得到两个答案(9)。然而,不知何故,我的过滤请求被完全忽略了。你知道我做错了什么吗

>>> <QuerySet [Answer: 2, Answer: 9, Answer: 9, Answer: 10]>

根据您当前的设计,一个
问题
实例可以与多个
答案
实例关联。因此,
survey.first()
返回第一个过滤的
问题
,以及
.answers.all()
返回所有相关答案实例

您的
answers\uu answer=“9”
过滤器工作正常;由于您有这样的关系,它将仅显示包含
答案的
问题
实例,并且
答案的
字段值为
9


也许您想在
问题
答案
之间建立一对一关系,或者如果许多问题都可以有一个共同的答案,那么您想从
问题
答案建立多对一关系

class Answer(TimeStampedModel):
    question = models.ForeignKey(
        "surveys.Question", on_delete=models.CASCADE, related_name="answers"
    )
    response = models.ForeignKey(
        "Response", on_delete=models.CASCADE, related_name="answers"
    )
    answer = models.TextField(verbose_name=_("Answer"))
    choices = models.ManyToManyField(
        "surveys.AnswerOption", related_name="answers", blank=True
    )