Перевод меток полей формы DjangoPython

Программы на Python
Anonymous
Перевод меток полей формы Django

Сообщение Anonymous »

У меня есть базовая форма с более чем 20 полями. Затем у меня есть около 15 других форм, наследующих эту форму, передающих параметр с именем поля, который базовая форма использует для удаления всех других полей. Лучше всего объяснить на примере:

Код: Выделить всё

class BaseForm(forms.Form):
reportid = forms.HiddenInput()
fromdate = forms.DateField(label=_("From"), widget=widgets.AdminDateWidget())
todate = forms.DateField(label=_("To"), widget=widgets.AdminDateWidget())
sort_by = forms.ChoiceField(label=_("Sort by"), choices=[])
.......

def __init__(self, *args, **kwargs):
fields = kwargs.pop('fields')
#Pseudo:
***del self.fields[field] for field not in fields***

class SubForm(forms.Form):
def __init__(self, *args, **kwargs):
fields = ['reportid', 'todate']
super(SubForm, self).__init__(fields=fields, *args, **kwargs)
Результирующая форма будет выглядеть так:

Код: Выделить всё

class SubForm(forms.Form):
reportid = forms.HiddenInput()
todate = forms.DateField(label=_("To"), widget=widgets.AdminDateWidget())
Моя проблема в том, что при первой инициализации BaseForm метки привязываются к полям с активным языком, а когда другой пользователь входит в систему с другим языком при настройке (или текущий пользователь меняет язык) метки полей не обновляются.

Я пришел к решению, используя такой словарь:

Код: Выделить всё

labels = {
'todate': lambda: _("To"),
'fromdate': lambda: _("From"),
.....
}
а затем при инициализации базовой формы циклически перебирает все поля и устанавливает

Код: Выделить всё

self.fields[field].widget.label = labels[field]()
Есть ли у меня более приятный (читай: более питонический) способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/759 ... anslations

Вернуться в «Python»