Когда я отображаю деньги в шаблоне списка или подробном шаблоне (только для чтения), я хотел бы иметь возможность отображать красивую версию значения поля, которая включает символ валюты: «100,00 долларов США».
Однако, когда запись редактируется, я хотел бы отобразить «100,00» в поле TextInput без какого-либо символа валюты.
Я создал собственный класс 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 поля формы?