这是我的代码:
question_list = Question.objects.filter(category=category, is_approved=1) \
.prefetch_related('answer_set')[:10]
我正在按is_approved
过滤问题,并希望此过滤器也可以回答。
我还想要一个答案限制,即'2'。有帮助吗?我知道这是一个简单的问题,但我是django的新手。
我也有同样的is_approved
字段。
我有问题表和答案表。答案表有一个外键question_id。每个问题都有答案。我想用答案来获取所有问题但是限制答案,即在单个查询中输入2个。
答案 0 :(得分:0)
只需添加answer__is_appoved=1
个查找。并且不要忘记将distinct()
调用添加到查询集:
question_list = Question.objects.distinct() \
.filter(category=category, is_approved=1,
answer__is_approved=1) \
.prefetch_related('answer_set')[:10]
如果您想获得两个已批准答案的已批准问题列表,请使用Count
注释:
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]
但请注意prefetch_related()
无论is_approved
属性如何都会获取所有答案。所以你必须手动过滤:
for question in question_list:
approved_answers = [answer for question.answer_set.all()
if answer.is_approved == 1]