Python 如何使用Django中与预取_相关的函数从两个表中筛选结果

Python 如何使用Django中与预取_相关的函数从两个表中筛选结果,python,django,Python,Django,这是我的代码: question_list = Question.objects.filter(category=category, is_approved=1) \ .prefetch_related('answer_set')[:10] 我过滤的问题是_批准,并希望这个过滤器的答案也 我还希望答案有一个限制,即“2”。有什么帮助吗?我知道这是一个简单的问题,但我是django的新手 我也有同样的答案 我有问题表和答案表。答案表

这是我的代码:

question_list = Question.objects.filter(category=category, is_approved=1) \
                                .prefetch_related('answer_set')[:10]
我过滤的问题是_批准,并希望这个过滤器的答案也

我还希望答案有一个限制,即“2”。有什么帮助吗?我知道这是一个简单的问题,但我是django的新手

我也有同样的答案

我有问题表和答案表。答案表有一个问题id的外键。每个问题有多达个答案。我想获取所有有答案的问题,但在单个查询中限制答案,即2个。

只需添加答案\u is\u approved=1查找即可。别忘了向queryset添加不同的调用:

question_list = Question.objects.distinct() \
                        .filter(category=category, is_approved=1,
                                answer__is_approved=1) \
                        .prefetch_related('answer_set')[:10]
如果您想获得包含两个已批准答案的已批准问题列表,请使用计数注释:

from django.db.models import Count

question_list = Question.objects.distinct() \
                        .filter(category=category, is_approved=1,
                                answer__is_approved=1) \
                        .annotate(answer_cnt=Count('answer')) \
                        .filter(answer_cnt=2) \
                        .prefetch_related('answer_set')[:10]
但请注意,与预回迁相关的回迁将获取所有答案,而与is_approved属性无关。因此,您必须先进行过滤,然后手动:

for question in question_list:
    approved_answers = [answer for question.answer_set.all()
                               if answer.is_approved == 1]

有了这个,我无法得到任何相关的问题。我还想对答案有个限制,你是什么意思?对于问题列表中的q:打印q.answer\u set。所有答案都应正常工作。请解释答案的限制。我的意思是,如果某个特定问题的所有答案都被批准为0。那么上述问题列表将不会显示同样已被批准为1的问题表的结果。我需要所有的问题结果集,只有两个答案。你想得到有两个批准答案的问题吗?然后查看更新的答案。