2016-04-13 40 views
1

İngilizce'de yabancı dillerin bir listesini gösteren bir seçim menüsüne sahibim. Şu anda sitenin hangi dilde görüntülendiğine bağlı olarak İspanyolca veya Japonca listesini göstermek istiyorum.django formunda belirli tablo sütununu yineleme

Şablon sayfamdaki form, varsayılan olarak en (İngilizce) olarak görüntülenir. Bu benim şablon sayfasında neye benzediği:

{{ form.native }} 

My formu sitesi "this_language" parametresinden bakıldığında ediliyor geçerli dilini bilir. Benim formu şuna benzer:

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')) 

modeli şöyle görünür: Ben değiştirmek modele ya es veya js "self.en dönüş" olabilir fark

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 

ve ben istenen olsun sonuç.

Bunu dinamik olarak şablon sayfasında veya forms.py'de yapmak mümkün mü?

cevap

1

Bunu denemek için bir şansım yok, ancakkullanımından başka ModelChoiceField için farklı bir ekran göstermek istiyorsanız, kendi form alanınızı tanımlayabilirsiniz. Bu ModelChoiceField devralır, ancak label_from_instance yöntemi geçersiz:

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

bir çekicilik çalıştı, teşekkür ederim! –