2016-04-13 7 views
1

私は外国語のリストを英語で表示する選択メニューがあります。django形式で特定の表の列を反復する方法

私のテンプレートページのフォームは、デフォルトでen(英語)をレンダリングしています。これは私のテンプレートページで次のようになります。

{{ form.native }} 

私のフォームは、サイトが「this_language」パラメータから表示されている現在の言語を知っています。私のフォームは、次のようになります。

class RegistrationForm(forms.ModelForm): 

    def __init__(self,*args,**kwargs): 

     if 'this_language' in kwargs: 
      this_language = kwargs.pop('this_language') 
      super(RegistrationForm, self).__init__(*args, **kwargs) 
      self.fields['native'] = forms.ModelChoiceField(queryset=Language.objects.all().order_by(this_language), empty_label=_('Please select')) 

モデルは次のようになります。私は、変更モデルのいずれかにESまたはJSに「self.enを返す」ことができます気づい

class Language(models.Model): 
    en = models.CharField(max_length=250) 
    es = models.CharField(max_length=250, null=True) 
    ja = models.CharField(max_length=250, null=True) 

    def __unicode__(self): 
     return self.en 

と私は希望を取得結果。

しかし、これをテンプレートページやforms.pyで動的に行うことはできますか?

答えて

1

私はそれを試す機会はありませんが、__unicode__以外のModelChoiceFieldの別の表示を表示する場合は、独自のフォームフィールドを定義できます。それは、ModelChoiceFieldから継承しますが、label_from_instanceメソッドをオーバーライド:

class LanguageChoiceField(forms.ModelChoiceField): 
    def __init__(self, *args, **kwargs): 
     self.language = kwargs.pop('language', None) 
     super(LanguageChoiceField, self).__init__(*args, **kwargs) 

    def label_from_instance(self, obj): 
     # return the field you want to display 
     if self.language: 
      return getattr(obj, self.language) 
     return obj.en 

class RegistrationForm(forms.ModelForm): 
    # your code 
    self.fields['native'] = LanguageChoiceField(language=this_language, queryset=...) 
+0

は魅力を働いた、ありがとうございました! –

関連する問題