访问MultipleChoiceField选项值
我想知道如何从表单中获取选择字段的值,而不是键。
我有一个表单,让用户为公司选择一些用户的邮箱。比如,我有这样的一个表单(之所以使用模型表单,是因为它在一个表单组里,但现在这不是重点):
class Contacts(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(Contacts, self).__init__(*args, **kwargs)
self.company = kwargs['initial']['company']
self.fields['emails'].choices = self.company.emails
# This produces stuff like:
# [(1, 'email@email.com'), ...]
emails = forms.MultipleChoiceField(required=False)
class Meta:
model = Company
我想在视图中获取所有选中邮箱的列表,类似这样:
form = ContactsForm(request.POST)
if form.is_valid():
form.cleaned_data['emails'][0] # produces 1 and not email
这里没有像get_emails_display()
这样的函数,就像在模型中那样。另外,建议使用form.fields['emails'].choices
也不行,因为它会给出所有的选择,而我需要的是类似form.fields['emails'].selected_choices
的东西?
有没有什么想法,或者如果不清楚请告诉我。
2 个回答
8
好的,希望这更接近你想要的结果。
emails = filter(lambda t: t[0] in form.cleaned_data['emails'], form.fields['emails'].choices)
这样应该能给你提供你想要的选中选项列表。
1
这个解决方案可能不是最完美的,但我想显示的名字应该还是可以从 form.fields['emails'].choices
里找到。所以你可以遍历 form.cleaned_data['emails']
,然后从字段的选项中获取对应的名字。