Django表单字段标签翻译

12

我有一个基本表单,包括20多个字段。然后我还有约15个其他的表单继承自该表单,并传递一个名为fields的参数,该基本表单使用它来删除所有其他字段。最好通过示例进行解释:

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]()

我有没有更加Pythonic的方式来实现这个需求呢?


3
你是否使用ugettext_lazy来翻译字段? - Krzysztof Klimonda
1
@Krzysztof:当然!那很愚蠢,我导入了ugettext而不是ugettext_lazy...如果你把你的评论发表为答案,我会接受它 ;) - Sindri Guðmundsson
1个回答

15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接