访问MultipleChoiceField选项值

3 投票
2 回答
6375 浏览
提问于 2025-04-15 11:16

我想知道如何从表单中获取选择字段的值,而不是键。

我有一个表单,让用户为公司选择一些用户的邮箱。比如,我有这样的一个表单(之所以使用模型表单,是因为它在一个表单组里,但现在这不是重点):

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'],然后从字段的选项中获取对应的名字。

撰写回答