gpt4 book ai didi

python - 如何以django形式迭代特定表列

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:06 26 4
gpt4 key购买 nike

我有一个选择菜单,其中显示英语的外语列表。我想以西类牙语或日语显示列表,具体取决于当前查看网站所用的语言。

我的模板页面上的表单默认呈现 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'))

模型如下所示:

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 显示除使用 __unicode__ 之外的不同显示,您可以定义自己的表单 field 。它继承自 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=...)

关于python - 如何以django形式迭代特定表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com