Как в Django получить сумму значений из определенной колонки в базе данных?

Как добавить итоговую сумму всех накладных в результате расчета ЗП к таблице в профиле человека, чтобы показать общий заработок за все время?
  • 27 марта 2024 г. 14:19
Ответы на вопрос 2
Для того чтобы получить сумму значений из определенной колонки в базе данных в Django, можно воспользоваться методом aggregate и функцией Sum. Например, для модели Invoice, которая представляет накладные, чтобы получить сумму всех значений из колонки amount, можно сделать следующее:

```python
from django.db.models import Sum
from myapp.models import Invoice

total_amount = Invoice.objects.aggregate(total_amount=Sum('amount'))['total_amount']
```

Здесь 'amount' - это название колонки, из которой мы хотим получить сумму, 'total_amount' - название переменной, в которую будет сохранено значение суммы.

Чтобы добавить итоговую сумму всех накладных в результате расчета ЗП к таблице в профиле человека, можно сделать следующее:

1. Создать модель для профиля человека с полем total_earnings, в котором будет храниться общий заработок за все время.

```python
from django.db import models

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    total_earnings = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
```

2. При расчете ЗП сумму добавлять к total_earnings:

```python
from myapp.models import Profile, Invoice

def calculate_salary(user):
    total_amount = Invoice.objects.aggregate(total_amount=Sum('amount'))['total_amount']
    profile = Profile.objects.get(user=user)
    profile.total_earnings += total_amount
    profile.save()
```

Теперь при вызове функции calculate_salary для определенного пользователя, его общий заработок будет автоматически обновляться.
Примерно так (импорты и наименование в бд свои пропишите): 
from django.db.models import Sum
from .models import Raschet

# counter
count = Raschet.objects.aggregate(total=Sum('summa'))['total']
Похожие вопросы