2017-02-23 10 views
1

に抽出されたデータベースフィールドを送信します。計算モデルはprice fieldですが、価格はとなり、VATとなります。データベースにVATを保存する必要がありますが、(VATを含む)を表示する必要があります。は、次のように私はビューを持っているDjangoテンプレート

したがって、計算ごとに価格を計算する方法はありますか?次のように

archive.htmlテンプレートは次のとおりです。

{% for calculation in calculations %} 
     <tr data-archive-row class="archive-row"> 
      <td> 
       <span>{{ calculation.make }}</span><br> 
       <small >{{ calculation.model }}</small> 
      </td> 
      <td> 
       <span class="text-success text-semibold"> 
        {{ calculation.purchase_price|floatformat:0|intcomma }} 
       </span> 
       <small class="text-muted">(incl. VAT)</small> 
      </td> 
     </tr> 
{% endfor %} 

したがって、テンプレートで、それは価格の排他VAT示しています。

私は包括的なVATに変換する機能を作成しました:

def price_incl_vat(price_excl_vat): 
    return (price_excl_vat * decimal.Decimal(settings.VAT_VALUE)).normalize() 

は、ビューに(関数を呼び出す)価格を計算して、テンプレートや缶にそれを送信する方法はありますそれはテンプレートで行われますか?

これを行うにはもっと良い方法がありますか?

ありがとうございます。

答えて

1

あなたはあなたのモデルにメソッドとしてprice_incl_vat機能を置くことができます。

class Calculations(models.Model): 
    # ... fields here ... 

    def price_incl_vat(self): 
     return (self.purchase_price * decimal.Decimal(settings.VAT_VALUE)).normalize() 

を次に、あなたのテンプレートにメソッドを呼び出すことができます。

<span>{{ calculation.price_incl_vat|intcomma }}</span> 
2
  1. あなたは

    を頼むか、テンプレートで行うことができますか?

    はい、custom template filterを作成できます。 yourapp/templatetags/yourapp_tags.py

    import decimal 
    
    from django import template 
    from django.conf import settings 
    
    register = template.Library() 
    
    
    # add VAT 
    @register.filter(name='add_vat') 
    def add_vat(price_excl_vat): 
        return price_excl_vat * decimal.Decimal(settings.VAT_VALUE)).normalize() 
    

    に続いて、テンプレート内の

    あなたは、これは「より」サーバー側になりたい場合は別の方法として、(テンプレートフィルターはまだpythonで定義されて
    {% load myapp_tags %} 
    {% for calculation in calculations %} 
        {{ calculation.purchase_price|add_vat }} 
    {% endfor %} 
    
  2. コード)を使用すると、モデル上にメソッドを追加することができ、より多くの場所で利用できるようになります。

    class Calculation(models.Model): 
        # more stuff here 
    
        @property 
        def price_including_vat(self): 
         return self.purchase_price * decimal.Decimal(settings.VAT_VALUE)).normalise() 
    

    そして、それはcalculation.price_including_vatとしてテンプレートに含め、どこでも利用可能です。

関連する問題