2011-09-29 17 views
10

私は20以上のフィールドを持つベースフォームを持っています。それから私はそのフォームから継承している約15の他のフォームを持っていて、ベースフォームが他のフィールドをすべて削除するために使うフィールドと呼ばれるパラメータを渡しています。ベスト例を通じて説明: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_lazyの代わりにugettextをインポートしていた...私はそれを受け入れるだろう答えとしてあなたのコメントを投稿します) –

答えて

関連する問題