當我在列表模板或詳細(只讀)模板中顯示金額時,我希望能夠顯示包含貨幣符號的字段值的漂亮版本:「$ 100.00」如何用列表模板中的貨幣符號和簡單的十進制代表Django貨幣字段進行編輯?
但是,當正在編輯記錄,我想在沒有任何貨幣符號的情況下在TextInput框中顯示「100.00」。
我做了一個自定義models.DecimalField類和forms.DecimalField類來表示在我的Django應用程序中的錢。
所以我試圖想出一種方法來在模板中有一個替換版本的字段的值是漂亮的(即正確格式化的查看,但不理想的編輯)。我知道有模板過濾器可以讓你完成這個任務,但我相信這會阻止我遍歷表單中的字段並顯示它們的值。
如果我可以添加一個漂亮的屬性到我的自定義字段類,我可以檢查它是否存在於模板中並顯示它。到目前爲止,我嘗試這樣做:
class MoneyFormField(forms.DecimalField):
def __init__(self, *args, **kwargs):
# I plan to add symbol localization code here
self.symbol= '$'
def prepare_value(self, value):
# assign pretty value to an attribute that template can access
self.pretty = self.pretty_value(value)
try:
return round(Decimal(value),2)
except:
return 0
def pretty_value(self, value):
if not value:
value = 0
return self.symbol + str(round(Decimal(value),2))
的問題是,爲了在模板中訪問美麗的價值,我必須先訪問原始值,以便prepare_value()被調用。
如果我試圖在這樣的一個模板打印漂亮值...
{% for field in payment_form %}
{{ field.field.pretty }} {{ field.value }} {{ field.field.pretty }}
{% endfor %}
那麼第一個漂亮被忽略,但最後漂亮的照片。
如果我能得到這個工作,那麼我會顯示一個模板一個漂亮的值(或者漂亮不存在默認值)是這樣的:
{% if field.field.pretty %}
{{ field.field.pretty}}
{% else %}
{{ field.value }}
{% endif %}
沒有人有做的任何建議可用於模板的字段的替代表示?
TL; DR-如何訪問表單字段init中的字段值?