Проблема с добавлением через 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
. Этот параметр также указывает валюту и может конвертировать деньги в другую валюту.