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 }}
Надеюсь, это поможет кому-нибудь в решении этой проблемы. Это работает, но я уверен, что может быть другой профессиональный способ сделать это, но это все, что я смог придумать сейчас и работает для меня.
Всего наилучшего!