Я пытаюсь создать аннотацию в наборе запросов django.Аннотация представляет собой подсчет обратного внешнего ключа на основе условия.У меня проблема в том, что когда я делаю счет для одного обратного внешнего ключа с условием, я получаю правильные данные, но когда я делаю две аннотации, по одной для каждого обратного внешнего ключа.
Вот набор запросовс аннотацией подсчета для одного обратного внешнего ключа:
ExamResponse.objects.filter(
course_class__course=course,
exam__exam_type=Exam.PRACTICE,
user__is_demo=False,
ended__isnull=False,
id=125752
).order_by(
'user_id',
'started'
).annotate(
total_ecq_count=Sum(
Case(
When(
choice_questions__response_time__gte=ENGAGEMENT_THRESHOLD,
choice_questions__id__isnull=False,
then=1
),
default=0,
output_field=IntegerField()
),
distinct=True
),
).values('total_ecq_count')
Результаты (правильный результат):
<QuerySet [{'total_ecq_count': 1}]>
Запрос с двумя аннотациями подсчета
ExamResponse.objects.filter(
course_class__course=course,
exam__exam_type=Exam.PRACTICE,
user__is_demo=False,
ended__isnull=False,
id=125752
).order_by(
'user_id',
'started'
).annotate(
total_ecq_count=Sum(
Case(
When(
choice_questions__response_time__gte=ENGAGEMENT_THRESHOLD,
choice_questions__id__isnull=False,
then=1
),
default=0,
output_field=IntegerField()
),
distinct=True
),
total_etq_count=Sum(
Case(
When(
text_questions__response_time__gte=ENGAGEMENT_THRESHOLD,
text_questions__id__isnull=False,
then=1
),
default=0,
output_field=IntegerField()
),
distinct=True
),
).values('total_ecq_count', 'total_etq_count')
Результаты: (Total_ecq_count увеличился с 1 до 3 !!!)
<QuerySet [{'total_ecq_count': 3, 'total_etq_count': 4}]>