इसे आजमाएं:
Question.objects.annotate(
answer_amount=Count('answers'),
is_user_agreed=F('answers__is_agreed'),
).order_by('id', '-answers__is_agreed').distinct('id')
अगर question
कोई answers
नहीं है , फिर question.is_user_agreed
None
है . अगर question
कम से कम एक answers
है answer.is_agreed=True
. के साथ , फिर question.is_agreed
क्या True
है . अन्यथा, is_user_agreed
False
है ।
या यह:
agreed_questons = Answer.objects.filter(
is_agreed=True,
).values_list('question_id', flat=True).distinct()
Question.objects.annotate(
answer_amount=Count('answers'),
is_agreed=Case(
When(id__in=agreed_questions, then=True),
When(answers__isnull=True, then=None),
default=False,
output_field=NullBooleanField(),
),
)
agreed_questons
id
. की सूची है questions
. का , जिसमें कम से कम एक answers
हो answer.is_agreed=True
. के साथ ।