Django表单字段标签翻译

2024-09-24 06:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个超过20个字段的基表。然后我有大约15个其他表单继承自该表单,传入一个名为fields的参数,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时,标签将绑定到使用活动语言的字段,当另一个用户使用另一个语言设置(或当前用户更改语言)登录时,字段标签不会更新。

我用这样的口述来解决问题:

labels = {
    'todate': lambda: _("To"),
    'fromdate': lambda: _("From"),
    .....
}

然后在初始化通过所有字段和设置的baseform循环时

self.fields[field].widget.label = labels[field]()

我有什么更好的方法来达到这个目的吗?


Tags: selfform表单fieldfieldsformswidgetswidget