Reputation: 17067
I have a ChoiceField in a bound form, whose choices are:
[('all', 'All users'), ('group', 'Selected groups'), ('none', 'None')]
In the template, I have no problem accessing its bound value (the actual value to be stored; the first element of each tuple) and the choices. With these pieces of info in hands, I know I should be able to access the display values, or the second element of each tuple. But how can I do that in the template? Thanks.
Upvotes: 15
Views: 20466
Reputation: 2770
After not being able to use get_FOO_display due to using the 'union' method (As it returns a dictionary, not a list of objects). I wrote a quick template tag to convert the field display.
@register.simple_tag
def tag_get_display(obj):
"""
Returns the display of the field when unable to access get_foo_display.
"""
return CHOICES_LIST[obj][1]
Upvotes: -1
Reputation: 1326
If you use {{ form.instance.field }}
in the form template, it should display the selected choice display name
Upvotes: -1
Reputation: 4446
Use the get_FOO_display property.
** Edit **
Oups! Quick editing this answer, after reading the comments below.
bound_form['field'].value()
Should work according to this changeset
Upvotes: 5
Reputation: 8309
I have a contact form using the FormView
class-based view. The contact form has some ChoiceField
fields. I'm not storing the submissions in the database; just emailing them to the site owner. This is what I ended up doing:
def form_valid(self, form):
for field in form.fields:
if hasattr(form[field].field, 'choices'):
form.cleaned_data[field + '_value'] = dict(form[field].field.choices)[form.cleaned_data[field]]
...
Upvotes: 0
Reputation: 6323
I doubt that it can be done without custom template tag or filter. Custom template filter could look:
@register.filter
def selected_choice(form, field_name):
return dict(form.fields[field_name].choices)[form.data[field_name]]
Upvotes: 13
Reputation: 417
Check this link - https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display
You can use this function which will return the display name - ObjectName.get_FieldName_display()
Replace ObjectName with your class name and FieldName with the field of which you need to fetch the display name of.
Upvotes: 0