У меня есть baseform с более чем 20 полями. Затем у меня есть около 15 других форм, наследующих от этой формы, передавая параметр, называемый полями, которые baseform использует для удаления всех остальных полей. Лучшее объяснение с помощью примера:
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 инициализируется в первый раз, метки привязаны к полям с активным языком, а когда другой пользователь входит в систему с другим языковым параметром (или текущие пользователи меняют языки), метки полей не обновляйте.
Я пришел к решению с помощью dict так:
labels = {
'todate': lambda: _("To"),
'fromdate': lambda: _("From"),
.....
}
а затем при инициализации базовой формы, проходящей через все поля, и установки
self.fields[field].widget.label = labels[field]()
Есть ли у меня какой-нибудь приятный способ (читайте: больше pythonic) для достижения этого?