Как я могу получить ежемесячные доходы, расходы, чистый доход и отобразить их в шаблоне django с помощью цикла
Я работаю над проектом Django с двумя моделями; Расходы и Доходы. Я хочу получить Общий доход, Общие расходы и Чистый доход за каждый месяц, перемещенный в таблицу. Чистый доход должен быть равен Общий доход минус (-) Общие расходы. И вот у меня есть эти модели (Доход и Расход одинаковые), имеющие одинаковые свойства, как показано ниже
class Income(models.Model):
description = models.CharField(max_length=100, null=False)
category = models.CharField(max_length=100, choices=CATEGORY_INCOME, null=True)
staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
amount = models.PositiveIntegerField(null=False)
remarks = models.CharField(max_length=120, null=True)
date = models.DateField(auto_now_add=False, auto_now=False, null=False)
addedDate = models.DateTimeField(auto_now_add=True)
Вот что я пробовал в своем файле views:
def monthly_Income(request):
total_monthly_income = Income.objects.annotate(month=TruncMonth('date')).values('month').annotate(total_monthly_income=Sum('amount'))
total_monthly_expenses = Expenditure.objects.annotate(month=TruncMonth('date')).values('month').annotate(total_monthly_expenses=Sum('amount'))
net_monthly_income = total_monthly_income - total_monthly_expenses
context = {
'total_monthly_income': total_monthly_income,
'total_monthly_expenses':total_monthly_expenses,
'net_monthly_income':net_monthly_income'
}
В моем шаблоне django вот как я пытаюсь отобразить результаты.
{% for income in total_monthly_income %}
{{ income.total_monthly_income | intcomma }}
{{ total_monthly_expenses }}
{{ net_monthly_income }}
{% endfor %}
Проблема в том, что я могу получить общий месячный доход, но не могу получить общие месячные расходы и чистый доход по каждому месяцу года. Кто-то должен любезно помочь мне получить правильный результат соответственно.
Как я догадался, у вас есть набор запросов для total_monthly_income
и total_monthly_expenses
. Поэтому я обновил вашу функцию следующим образом
просматривает изменения:
def monthly_Income(request):
#Get Day of today from current date and time
now = datetime.datetime.now()
total_monthly_income = Income.objects.annotate(month=TruncMonth('date')).values('month').annotate(total_monthly_income=Sum('amount'))
total_monthly_expenses = Expenditure.objects.annotate(month=TruncMonth('date')).values('month').annotate(total_monthly_expenses=Sum('amount'))
income_expense = zip(total_monthly_income, total_monthly_expenses)
net_monthly_income_list = []
for income, expense in income_expense:
net_monthly_income_list.append(income.get('total_monthly_income', 0) - expense.get('total_monthly_expenses', 0))
income_list = zip(total_monthly_income, total_monthly_expenses, net_monthly_income_list)
context = {
'income_list': income_list
}
return render(request, 'cashier/view_income_monthly.html', context)
Также требуется внести некоторые изменения в файл шаблона следующим образом:
<tbody>
{% for total_monthly_income, total_monthly_expenses, net_monthly_income in income_list %}
<tr>
<th scope="row">{{ forloop.counter }}</th>
<td nowrap>{{ total_monthly_income.month }}</td>
<td nowrap>{{ total_monthly_income.total_monthly_income | intcomma }}</td>
<td >{{ total_monthly_expenses.total_monthly_expenses | intcomma }}</td>
<td >{{ net_monthly_income | intcomma }}</td>
<td nowrap>
<a class="btn btn-info btn-sm" href="#">Edit</a>
<a class="btn btn-danger btn-sm" href="#">Delete</a>
</td>
</tr>
{% endfor %}
</tbody>
Надеюсь, теперь это должно работать для вас :)