Django - запрос для суммирования значений атрибутов из модели на frontpage

У меня есть класс модели для курсов с именем "Curs", в котором я задаю поле с количеством студентов (alocati_curs). Когда я делаю цикл на frontpage, чтобы показать все существующие курсы, я показываю их {% for curs in profil.curs_set.all %} ..... Также я могу отобразить количество курсов {% with profil.curs_set.all.count as total_cursuri %}.... . Но я не знаю, как сделать запрос, чтобы получить общее количество студентов (alocati_curs) из всех курсов. Пожалуйста, помогите мне :) . Спасибо.

Я пробовал {% with profil.curs.alocati_curs_set.all.count as total_cursuri %} и {% for curs in profil.curs.alocati_curs_set.all %}, но ничего не получается, и я уверен, что это не правильный запрос.

В конце концов мне удалось найти решение. Я использую агрегацию. В моем представлении я импортирую свою модель и из django Sum

from django.db.models import Sum
from cursuri.models import Curs

и в моем представлении функции я добавил

alocati_curs_trainer = Curs.objects.filter(creator_curs=profil.id).aggregate(tac=Sum('alocati_curs'))

подобно этому

def trainerProfil(request, pk):
    profil = Profil.objects.get(id=pk)
    alocati_curs_trainer = Curs.objects.filter(creator_curs=profil.id).aggregate(tac=Sum('alocati_curs'))
    context = {'profil' : profil, 'alocati_curs_trainer' : alocati_curs_trainer}
    return render(request, 'utilizatori/profil.html', context)

и на первой странице я показываю с

{{ alocati_curs_trainer.tac }} 

и теперь я могу видеть для каждого тренера, сколько студентов (aka alocati_cus) имеет в общей сложности для всех курсов, назначенных им

Если я хочу также показать всех студентов всех курсов, я могу задать это в функции (def trainerProfil) в view

alocati_curs_total = Curs.objects.all().aggregate(tact=Sum('alocati_curs'))

и на странице я показываю их с

{{alocati_curs_total.tact }}

Надеюсь, это поможет кому-нибудь в решении этой проблемы. Это работает, но я уверен, что может быть другой профессиональный способ сделать это, но это все, что я смог придумать сейчас и работает для меня.

Всего наилучшего!

Вернуться на верх