Как вывести сумму по колонке в джанго?
Добрый день. У меня есть моделька расчета скажем ЗП (raschet). Она считает сумму и потом в профиле человека выводит типа накладную. Выводит в виде таблицы каждая накладная это отдельная строка которая имеет сумму. проблема заключается в том, что хочу вывести сумму всех этих накладных например пусть будет даже внизу таблицы. Мол за все время вы заработали столько-то и столько-то. Мой мозг еще до это не дошел. Буду благодарен за помощь. Спасибо
Дополнительно:
Ответы:
Примерно так (импорты и наименование в бд свои пропишите):
from django.db.models import Sum from .models import Raschet # counter count = Raschet.objects.aggregate(total=Sum('summa'))['total'] |
from django.db.models import Sum from .models import Raschet # counter count = Raschet.objects.aggregate(total=Sum('summa'))['total']
- Можно я вам закину скрином модельку, вьюшку и кусок кода профиля. У меня что то не получилось может я что то не правильно делаю. Буду очень Вам благодарен
- javelinataxi,
скрином
/)_-)
- Могу и кодом сбросить. Как будет удобно. Мне самое главное понять как это сделать
- javelinataxi, кидайте, только не скрином
- models.py
class raschet(models.Model):
nrinv=models.CharField(max_length=20,verbose_name="Номер фактуры:")
date=models.DateTimeField(auto_now=True,db_index=True,verbose_name="Дата создания:")
user=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
period1=models.DateField(auto_now=False,db_index=True,verbose_name="Период С:")
period2=models.DateField(auto_now=False,db_index=True,verbose_name="Период по:")
bTurbo = models.FloatField(max_length=5, blank=True, null=True, default=0, verbose_name="Брутто ")
procTurbo = models.FloatField(max_length=5,blank=True,null=True, default=0, verbose_name="Процент")
provTurbo = models.FloatField(max_length=5, blank=True, null=True, default=0, verbose_name="Провизия ")
bonTurbo = models.FloatField(max_length=5, blank=True, null=True, default=0, verbose_name="Бонусы ")
gotTurbo = models.FloatField(max_length=5, blank=True, null=True, default=0, verbose_name="Наличка ")
ItogTurbo = models.FloatField(max_length=5, blank=True, null=True, verbose_name="ИТОГО ")
SUMMM=models.FloatField(max_length=5,blank=True,null=True,verbose_name="Сумма К выплате")
tytul = models.CharField(max_length=50,verbose_name="Титул")def save(self, *args, **kwargs):
if not self.pk:
self.provTurbo = (self.bTurbo * self.procTurbo) / 100
self.ItogTurbo = (self.bTurbo - self.provTurbo - self.gotTurbo) + self.bonTurbo
self.SUMMM= self.ItogTurbo
return super(raschet, self).save(*args, **kwargs)class Meta:
verbose_name_plural = 'Расчеты'
verbose_name = 'Расчет'
-------------------------------------------------------------------------------------------------
views.py (профиля)
#----------------------------------------Внесены исправления-----------------@login_required
#-------------------Профиль пользователя-----------
# -----Отображение информации пользователя,расчет ЗП пользователя
#-------Отображение договоров, купонов, долгов пользователя
def profile(request):
prof = Profile.objects.filter(user=request.user.pk)
object = raschet.objects.filter(user=request.user.pk).order_by('-id')
avto = Auto.objects.filter(user=request.user.pk).order_by('-id')
bon = bonus.objects.filter(user=request.user.pk).order_by('-id')
rep = repay.objects.filter(user=request.user.pk).order_by('-id')
bl = blocked.objects.filter(user=request.user.pk).order_by('-id')
priv = Doks.objects.filter(user=request.user.pk).order_by('-id')paginator = Paginator(object, 5) # По 5 статьи на каждой странице.
page = request.GET.get('page')
try:
object = paginator.page(page)
except PageNotAnInteger:object = paginator.page(1)
except EmptyPage:object = paginator.page(paginator.num_pages)
return render(request,'profile.html', {'object': object,'prof':prof,'avto':avto,'bon':bon,'rep':rep,'bl':bl,'priv':priv})html (профиля фрагмент где находятся эти накладные)
{% if user.is_authenticated %}
Профиль Водителя
{% for i in prof %}
Краткая информация о водителе:
"{{i.user}}"
Имя {{i.name}} Фамилия {{i.name1}} Дата регистрации {{i.workday|date:'d.m.Y'}} E_mail {{i.e_mail}} Номер Телефона {{i.phone}} Дата Психотестов {{i.psichotesty|date:'d.m.Y'}} Дата Медкомиссии {{i.medical|date:'d.m.Y'}} Дата важности ВУ {{i.dateddok|date:'d.m.Y'}} {% endfor %}
{%endif%}
Фактуры
Транспорт
Блокировки
Бонусы
Рекомпенсаты
Договора# № Фактуры Водитель Период Сумма Статус Подробности {% for i in object%}
{{i.id}} {{i.nrinv}} {{i.user}} {{i.period1|date:'d.m.Y'}} - {{i.period2|date:'d.m.Y'}} {{i.SUMMM|floatformat:"2"}} eu. {{i.Status}} {% endfor %}
- javelinataxi, а ты же потом смотришь что ты напостил? тебе это удобно читать? панель редактирования ты видел?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Для того чтобы вывести сумму значений по определенной колонке в Django, вам необходимо использовать агрегацию в запросе к базе данных.
Предположим, у вас есть модель `MyModel` с колонкой `column_name`, которую вы хотите просуммировать. Вот как это можно сделать:
```python
from django.db.models import Sum
# Получаем сумму значений по колонке column_name
sum_result = MyModel.objects.aggregate(total_sum=Sum('column_name'))
# Печатаем результат
print(sum_result['total_sum'])
```
В данном примере мы используем метод `aggregate` для выполнения агрегации по колонке `column_name` и сохраняем результат в переменную `sum_result`. Затем мы выводим сумму по этой колонке, обращаясь к ключу `total_sum` в словаре `sum_result`.
Убедитесь, что заменили `MyModel` на вашу собственную модель и `column_name` на название нужной вам колонки. Также учтите, что результат агрегации будет возвращен в виде словаря, поэтому вам нужно обращаться к нему по ключу, указанному в методе `aggregate`.
Надеюсь, это поможет вам вывести сумму по колонке в Django. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.