Reputation: 61021
How do I get the choices field values and not the key from the form?
I have a form where I let the user select some user's emails for a company. For example I have a form like this (this reason for model form is that it's inside a formset - but that is not important for now):
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 protected]'), ...]
emails = forms.MultipleChoiceField(required=False)
class Meta:
model = Company
and I want to get the list of all selected emails in the view, something like this:
form = ContactsForm(request.POST)
if form.is_valid():
form.cleaned_data['emails'][0] # produces 1 and not email
There is no get_emails_display()
kind of method, like in the model for example. Also, a suggestion form.fields['emails'].choices
does not work, as it gives ALL the choices, whereas I need something like form.fields['emails'].selected_choices
?
Any ideas, or let me know if it's unclear.
Upvotes: 3
Views: 6518
Reputation: 25303
Ok, hopefully this is closer to what you wanted.
emails = filter(lambda t: t[0] in form.cleaned_data['emails'], form.fields['emails'].choices)
That should give you the list of selected choices that you want.
Upvotes: 8
Reputation: 488354
It might not be a beautiful solution, but I would imagine that the display names are all still available from form.fields['emails'].choices
so you can loop through form.cleaned_data['emails']
and get the choice name from the field's choices.
Upvotes: 1