Объединить результаты двух аннотированных запросов - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь запросить django, чтобы получить следующий результат:

имя_убъекта, total_grades, прошло_передачей, прошло_преценцию

как

математика, 20,15,75.0

Запросы:

from django.db.models import Count
passed_bysubjects = grades.objects.filter(yeardata__year="2011-2012",grade__gte=5).values('code__name').annotate(Passed=Count('grade'))
total_bysubject = grades.objects.filter(yeardata__year="2011-2012").values('code__name').annotate(Total=Count('grade'))

Я сделал, как я публикую ниже, но мне интересно, есть ли лучший метод.

results = list(total_bysubject)
for a in passed_bysubjects:
    for b in results:
        if a['code__name'] == b['code__name']:
            b['Passed'] = a['Passed']
            b['Percentaje'] = (b['Passed'])*100/b['Total']

Может ли это быть достигнуто с помощью django методов?

Спасибо

1 Ответ

0 голосов
/ 11 февраля 2020

Спасибо @schillingt, который разместил мой в правильном направлении.

Для моего случая решение:

qset = grades.objects.filter(
    yeardata__year="2011-2012"
).values('code__name').annotate(
    Average=Avg('grade'),
    Passed=Count('grade',filter=Q(grade__gte=5)),
    Total=Count('grade'),
    Percentaje=F('Passed')*100/F('Total')
)

Мои данные что-то вроде:

студент, кодовое имя, год, класс

(кодовое имя для предмета)

И я хотел получить статистику по каждому предмету

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...