访问MultipleChoiceField选项值

时间:2009-04-27 16:00:53

标签: 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

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

  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 个答案:

答案 0 :(得分:7)

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

emails = filter(lambda t: t[0] in form.cleaned_data['emails'], form.fields['emails'].choices)

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

答案 1 :(得分:0)

这可能不是一个漂亮的解决方案,但我认为显示名称仍然可以从form.fields['emails'].choices获得,因此您可以遍历form.cleaned_data['emails']并从字段的选项中获取选择名称。< / p>