0

私は最初にオブジェクトインスタンスから値を取得し、それに別の値を掛けて元の値から他の値を減算する必要がある場合があります。複数のフィルタを使用しても問題ありませんか?ここで私の質問の簡単なデモンストレーションです。複数のdjangoフィルタを使用することをお勧めしますか?

は私がtemplate_filters.pyで次のフィルタを持っている:私は、次の操作をしています

1) add(): 
2) subtract(): 
3) multiply(): 
4) calculate_emi(): 

。貸借はオブジェクトインスタンスです:

{{ loan|calculate_emi|multiply:loan.duration|subtract|paid_emi }} 

このようなカスケードフィルタを使用してもよろしいですか?他の方法がある場合は、お勧めします。

答えて

0

私は過去にこの種の問題に遭遇しました。複数のフィルタを使用すると、かなり混乱する可能性があります。

解決策は、モデル関数を宣言することです。これは、別のモデルの属性に依存していない場合にのみ実行できます。

例:

class Loan(models.Model): 
    duration = models.IntegerField() 
    emi = models.IntegerField() 

    def duration_times_emi(self): 
     return self.duration * self.emi 

この関数は、テンプレート内のモデルインスタンスで呼び出すことができます:あなたはすべての変数へのアクセスを持っている場合は、再度

{{ loan.duration_times_emi }} 

は、これが唯一のあなたに有用であろうあなたはローンモデルレベルで必要です。

+0

私にとっては可読性は問題ではありません。前例のない機能エラーが心配です。モデルを作成するのではなく、ビューで同じことを行い、テンプレートに送信します。どう思いますか? –

+0

一度限りのケースで、このコードを別の場所で繰り返す必要がない場合は、ビュー内の値を計算してテンプレートに送信することができます。私はあなたの解決策だと思います!あなたがより良い方法を見つけたら教えてください。 – zubhav

関連する問題