访问MultipleChoiceField选项值

And*_*yuk 2 python django

如何获取选择字段值而不是表单中的键?

我有一个表单,我让用户为公司选择一些用户的电子邮件.例如,我有一个这样的形式(模型形式的原因是它在一个formset中 - 但这对于现在来说并不重要):

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
Run Code Online (Sandbox Code Playgroud)

我想在视图中获取所有选定电子邮件的列表,如下所示:

  form = ContactsForm(request.POST)
  if form.is_valid():
       form.cleaned_data['emails'][0] # produces 1 and not email
Run Code Online (Sandbox Code Playgroud)

没有任何get_emails_display()方法,例如在模型中.此外,一个建议form.fields['emails'].choices不起作用,因为它提供了所有选择,而我需要类似的东西form.fields['emails'].selected_choices

任何想法,或者让我知道它是否不清楚.

tgh*_*ghw 7

好的,希望这更接近你想要的.

emails = filter(lambda t: t[0] in form.cleaned_data['emails'], form.fields['emails'].choices)
Run Code Online (Sandbox Code Playgroud)

这应该会为您提供所需的选定列表.