我正在建立自己的预算应用程序。我正在使用此经理:
class AccountMonthlyManager(MonthlyCalculationManager):
def transactions(self, date_str):
date = get_this_month_and_year(date_str)
entries = self.related_set().filter(date__month=date[0], date__year=date[1]).aggregate(total=Sum('amount'))
return entries.get('amount', 0)
以及此模型:
class Account(models.Model):
begin = models.FloatField()
weekly_change = models.FloatField()
fixed_value = models.FloatField(null=True)
income = models.BooleanField(default=False)
monthly = AccountMonthlyManager()
objects = models.Manager()
我想在模板中显示每个帐户的所有交易总额,如下所示:
{% for account in view.budget_accounts %}
<tr class="dataLine budget" data-id="{{ account.id }}">
<td>{{ account.label }}</td>
<td>{{ account.monthly.transactions }}</td>
</tr>
{% endfor %}
但是,经理需要一个日期字符串,该字符串位于我的网址中。
url(r'^budgets/(?P<slug>[^/]+)/$', views.BudgetView.as_view(), name="budgets"),
我正在寻找一种方法来实现这一点,并没有让我为了这个目的而用大量代码重载我的视图。现在,我所做的就是:
def budget_accounts(self):
return Account.objects.filter(income=False, fixed_value=None)
我需要一种方法将此url字符串返回给管理器,因此它可以提供正确的总数!
答案 0 :(得分:1)
你的urls.py是什么?您应该能够在网址中添加参数,以便从/budgets/2017-12/
转换为view_budgets(monthyear)
之类的内容。基于Django URL Dispatcher的样本,您应该可以执行以下操作:
url(r'^budget/([0-9]{4})-([0-9]{2})/$', views.budget),
并将budget()函数更改为:
def budget(request, year, month):
或类似的。不确定如何将模板放入budget_accounts中,因此我不确定这是否真的是您的显示视图功能。但是urls.py是关键而且功能非常强大 - 如果你使用它,那么你可以拥有一个在GET上从未有任何传统参数的大型网站 - 仅用于安全目的(并且可能是为了防止URL变得太长)和POST。