2017-12-13 22 views
1

私は自分自身を少しの予算のアプリケーションを構築しています。Django - テンプレートからマネージャに変数を渡す

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 %} 
このモデルとともに

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) 

:私はこのマネージャを使用しています

しかし、マネージャには私のURLにある日付文字列が必要です。

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文字列を取得する方法が必要です!

答えて

1

あなたのurls.pyとは何ですか? /budgets/2017-12/からview_budgets(monthyear)に変換するように、URLにパラメータを追加することができます。

url(r'^budget/([0-9]{4})-([0-9]{2})/$', views.budget), 

とする予算()関数を変更します:

def budget(request, year, month): 

または類似Django URL Dispatcherからのサンプルに基づいて、あなたのような何かを行うことができるはず。テンプレートがbudget_accountsにどのようになっているのかわからないので、本当に表示ビュー機能であるかどうかはわかりません。しかし、urls.pyは鍵であり、非常に強力です。もしあなたがそれに取り組むなら、GETの伝統的なパラメータを決して持っていない大きなWebサイトをセキュリティ上の目的のためだけに使うことができます(URLがTOOに長くならないように) POSTのために。

+0

私はあなたが言っていることを見ています。私は間違いなくビューにデータを取得することができます..私の問題は、ビュー機能は、クエリセットをフェッチしていることです。私はテンプレート内のクエリーセットを繰り返しています。 –

+0

私はビューでこれをすべて処理する必要があると思うが、このロジックをすべてビューから取り除くのは、最初はすべてをマネージャーに移した理由だった! –

+0

私はURLを追加しました –

関連する問題