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 ...如果您将您的评论发布为答案,我会接受它;) –