Проблема с добавлением через models.py простого вычисления

Здравствуйте ребята, я практикуюсь на django и сейчас разрабатываю простой трекер расходов для основного проекта: Покупка легкового автомобиля за X сумму и сложение всех остальных расходов для получения одной общей суммы.

моя операция в основном выполняется в моем model.py

models.py

from django.db import models

# Create your models here.
class Project(models.Model):
    title = models.CharField(max_length=100)
    amount = models.FloatField()
    description = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.title



class Expenses(models.Model):
    project = models.ForeignKey(Project, related_name='expenses', on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    amount = models.FloatField()
    

    def __str__(self):
        return self.title

    
    def get_total_project_amount(self):
        return self.amount  + self.project.amount

Я хочу добавить основной проект и все расходы вместе, но я не использую правильный способ, когда я рендерю результат, он рендерится следующим образом:

основной проект: 50$ расходы, добавленные из типовой формы : 2(новые) расход: 13(новый) расход: 25(новый)

Итого: 52 итого: 63 итого: 75

Я хочу вывести основной проект и все расходы, чтобы получить единый результат, что-то вроде 50+2+13+25 Итого : 90$ общая сумма, необходимая для починки машины.

Кто-нибудь, кто понимает дополнение lojic, помогите пожалуйста и спасибо

.

Вы можете суммировать расходы следующим образом:

class Project(models.Model):
    # …
    
    @property    
    def total_amount(self):
        subtotal = self.expenses.aggregate(
            subtotal=Sum('amount')
        )['subtotal'] or 0
        return self.amount + subtotal

Таким образом, вы можете определить общую стоимость для Project объекта myproject с помощью:

myproject.total_amount

таким образом, суммируется amount плюс сумма всех связанных Expenses.


Примечание: обычно модели Django дается сингулярное имя, поэтому Expense вместо Expenses.


Примечание: Когда вы производите расчеты с деньгами, лучше использовать DecimalField [Django-doc], а не FloatField [Django-doc]. Плавающие числа могут создавать ошибки округления при выполнении вычислений. Вы также можете использовать django-money [GitHub] для указания MoneyField. Этот параметр также указывает валюту и может конвертировать деньги в другую валюту.

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