Django:显示模板中选定的多选字段的值
问题描述:
我试图找到一种显示多选字段的选定/初始值的文本的方式。Django:显示模板中选定的多选字段的值
我的问题是类似这样的,除了我不想值我想它对应的选项文本:
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']。然而,不知何故,我想从键查找字符串值(即“男”,“女”),是这样的:
{% for key in form.genders.value %}
{{ form.genders.choices.key }}
{% endfor %}
我无法找到使这项工作的一种方式。我怎样才能实现这个使用Django 1.3?
PS - 这是一个简短的例子,但我需要禁止使用多个更大的动态列表做if语句(即“如果key ==‘男’‘男人’......等”)
答
的方法添加到窗体,返回要
从模板
它看起来像这样:
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|selcted_labels:"genders" %}
{{ label }}
{% endfor %}
这很可能是这样的:'{%关键在form.genders.value%} {{form.genders.get_key_display}} {%endfor%}'但我不确定。 – Mig 2012-04-03 13:33:12