Python 如何在django表单中迭代特定的表列

Python 如何在django表单中迭代特定的表列,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我有一个选择菜单,上面有英语的外语列表。我想用西班牙语或日语显示列表,具体取决于网站当前使用的语言 默认情况下,“我的模板”页面上的表单呈现英语。这是我的模板页面中的外观: {{ form.native }} 我的表单通过“this_language”参数知道查看站点时使用的当前语言。我的表单如下所示: class RegistrationForm(forms.ModelForm): def __init__(self,*args,**kwargs): if 'th

我有一个选择菜单,上面有英语的外语列表。我想用西班牙语或日语显示列表,具体取决于网站当前使用的语言

默认情况下,“我的模板”页面上的表单呈现英语。这是我的模板页面中的外观:

{{ 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'))
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
模型如下所示:

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'))
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
我注意到我可以将模型中的“return self.en”更改为es或js,从而得到所需的结果


但是,是否可以在模板页面或forms.py中动态执行此操作?

我没有机会尝试此操作,但是如果您想为
ModelChoiceField
显示不同的显示,而不是使用
\uuuUnicode\uuUnicode
,您可以定义自己的表单字段。它继承自
modelcoocefield
,但覆盖
label\u from\u实例
方法:

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=...)