10
我有超過20個字段的基本形式。然後我有大約15個其他窗體繼承該窗體,傳遞一個名爲fields的參數,baseform使用該參數刪除所有其他字段。通過例子可以很好地說明一下:然後Django表單字段標籤翻譯
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())
我的問題是,當基本形式被首次初始化,標籤綁定到字段活動語言以及另一用戶使用其他語言設置(或當前用戶更改語言)登錄時,字段標籤不會更新。
我用這樣一個字典來解決:初始化基本形式,通過各領域的循環和設置
self.fields[field].widget.label = labels[field]()
我有任何更好的時候
labels = {
'todate': lambda: _("To"),
'fromdate': lambda: _("From"),
.....
}
,然後(讀:更pythonic)的方式來實現這一目標?
你使用ugettext_lazy爲翻譯領域? –
@Krzysztof:當然!這非常愚蠢,我正在導入ugettext而不是ugettext_lazy ...如果您將您的評論發佈爲答案,我會接受它;) –