Получение итоговых сумм продаж по каждому счету с использованием свойства модели в django

Хорошо, я думал, что смогу найти выход из этого с помощью гугла, но я застрял.

Желаемыми результатами являются

Account_name       Total
local sales        1802.50
int sales          0.00

из моих моделей

class Account(models.Model):
    account_number = models.IntegerField(unique=True, null=True, blank=True, default=None)
    account_name   = models.CharField(max_length=200, null=True, blank=True, unique=True)



class Sales(models.Model):
        account_name = models.ForeignKey(Account, on_delete=models.CASCADE, related_name='incomes')
        amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)

def sales_total(self):
        sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
        return sales_total

поэтому в моем шаблоне, когда я делаю

{% for account in accounts %}
    <tr>      
      <td>{{ account.sales_total }}</td>
    </tr>
{% endfor %}

Я получаю

Account_name       Total
local sales        <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>
int sales        <QuerySet [{'account_name': 3, 'sales_total': Decimal('1802.5')}]>

Измените функцию sales_total:

def sales_total(self):
        sales_total = Income.objects.values('account_name').order_by('account_name').annotate(sales_total=Sum('sales__total'))
        return sales_total[0].sales_total

Дополнительная информация: https://docs.djangoproject.com/en/4.0/topics/db/aggregation/#cheat-sheet

После долгих поисков в сети мне удалось это сделать

в модели счета я определил функцию для получения итогов продаж

def sales_total(self):
       return sum([item.sales_total() for item in self.incomes.all()])

В шаблоне получены значения {{ account.sales_total }}

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