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