如何从表单中获取选择字段值而不是键?
我有一个表单,我让用户为公司选择一些用户的电子邮件。 例如,我有一个这样的形式(模型形式的原因是它在一个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
之类的内容?
任何想法,或者让我知道它是否不清楚。
答案 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>