2011-09-29 113 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 ...如果您將您的評論發佈爲答案,我會接受它;) –

回答