我正在尝试找到一种方法来显示多选字段的选定/初始值的文本。
我的问题与这个问题类似,只是我不想要值,我想要它对应的选项文本:
Display value of a django form field in a template?
例如,如果我有一个包含以下内容的表单:
GENDER_CHOICES = (
('male', _('Men')),
('female', _('Women')),
)
genders = forms.MultipleChoiceField(choices=GENDER_CHOICES,
widget=widgets.CheckboxSelectMultiple(),
initial=[gender[0] for gender in GENDER_CHOICES])
然后在我的模板中我可以做:
{{ form.genders.value }}
获取选定选项的数组(即 [u'male', u'female']。但是,我想以某种方式从键中查找字符串值(即“Men”,“Women”),一些东西喜欢:
{% for key in form.genders.value %}
{{ form.genders.choices.key }}
{% endfor %}
我找不到实现此功能的方法。我如何使用 Django 1.3 实现此目的?
ps - 这是一个简短的示例,但我需要使用更大的动态列表来实现,这些列表禁止使用多个 if 语句(即“if key == 'male' 'Men' ... 等”)
最佳答案
向表单添加一个方法,返回您想要的列表
从模板中调用
看起来像这样:
def selected_genders_labels(self):
return [label for value, label in self.fields['genders'].choices if value in self['genders'].value()]
在行动中:
In [1]: from testapp.views import XForm; f = XForm(initial={'genders': ['male', 'female']}); print f.selected_genders_labels()
['Men', 'Women']
In [2]: from testapp.views import XForm; f = XForm(initial={'genders': ['female']}); print f.selected_genders_labels()
['Women']
In [3]: from testapp.views import XForm; f = XForm(initial={'genders': []}); print f.selected_genders_labels()
[]
In [4]: from testapp.views import XForm; f = XForm(); print f.selected_genders_labels()
['Men', 'Women']
所以你可以像这样迭代:
{% for label in form.selected_genders_labels %}
{{ label }}
{% endfor %}
FTR,我用过:
class XForm(forms.Form):
GENDER_CHOICES = (
('male', 'Men'),
('female', 'Women'),
)
genders = forms.MultipleChoiceField(choices=GENDER_CHOICES,
widget=widgets.CheckboxSelectMultiple(),
initial=[gender[0] for gender in GENDER_CHOICES])
def selected_genders_labels(self):
return [label for value, label in self.fields['genders'].choices if value in self['genders'].value()]
你可以制作这样一个模板过滤器:
@register.filter
def selected_labels(form, field):
return [label for value, label in form.fields[field].choices if value in form[field].value()]
用法:
{% for label in form|selected_labels:"genders" %}
{{ label }}
{% endfor %}
关于python - Django:在模板中显示所选多选字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993939/