2011-09-29 74 views
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)的方式来实现这一目标?

+3

你使用ugettext_lazy为翻译领域? –

+1

@Krzysztof:当然!这非常愚蠢,我正在导入ugettext而不是ugettext_lazy ...如果您将您的评论发布为答案,我会接受它;) –

回答