Django: Display Choice Value

222,498

Solution 1

It looks like you were on the right track - get_FOO_display() is most certainly what you want:

In templates, you don't include () in the name of a method. Do the following:

{{ person.get_gender_display }}

Solution 2

For every field that has choices set, the object will have a get_FOO_display() method, where FOO is the name of the field. This method returns the “human-readable” value of the field.

In Views

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()

In Template

{{ person.get_gender_display }}

Documentation of get_FOO_display()

Share:
222,498

Related videos on Youtube

Shankze
Author by

Shankze

Updated on February 28, 2022

Comments

  • Shankze
    Shankze about 2 years

    models.py:

    class Person(models.Model):
        name = models.CharField(max_length=200)
        CATEGORY_CHOICES = (
            ('M', 'Male'),
            ('F', 'Female'),
        )
        gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
        to_be_listed = models.BooleanField(default=True)
        description = models.CharField(max_length=20000, blank=True)
    

    views.py:

    def index(request):
        latest_person_list2 = Person.objects.filter(to_be_listed=True)
        return object_list(request, template_name='polls/schol.html',
                           queryset=latest_person_list, paginate_by=5)
    

    On the template, when I call person.gender, I get 'M' or 'F' instead of 'Male' or 'Female'.

    How to display the value ('Male' or 'Female') instead of the code ('M'/'F')?

    • Ignacio Vazquez-Abrams
      Ignacio Vazquez-Abrams over 13 years
      possible duplicate of Django print choices value
    • Shankze
      Shankze over 13 years
      I tried this method, In my template I am using: {% for person in object_list %} some html {{person.get_gender_display() }} html {% endfor %} I am getting the following error: Exception Value: Could not parse the remainder: '()' from 'person.get_gender_display()'
    • Shankze
      Shankze over 13 years
      My Bad, I should not have included '()' after person.get_gender_display. Its working now. Thanks.
    • Alejandro Garcia
      Alejandro Garcia about 11 years
      Just a little comment, since gender will only be either M or F(1 character lenght) it has no sense setting the max length of the charfield to 200. With max_lenght=1 is enough, will make your site more efficient and you will ensure that you wont have wrong data. :)
    • Ciro Santilli OurBigBook.com
      Ciro Santilli OurBigBook.com almost 8 years
    • Underoos
      Underoos almost 5 years
  • KhoPhi
    KhoPhi about 9 years
    This method is priceless. But aside using the method, what's the way to retrieve the value stored in say, {{ i.item.what_to_put_here}} ?
  • jMyles
    jMyles about 9 years
    I don't understand your subquestion. Is what_to_put_here just a method on item? If so, then your syntax is correct. This question about the specific situation of having named choices in a Field object.
  • adam b
    adam b about 8 years
    Just to note, for anyone using Jinja2 for their templates, you should include the parentheses. {{ person.get_gender_display() }}
  • DylanYoung
    DylanYoung about 7 years
    Bonus points: what's the best way to do this if you're sending your information via JSON (for instance in a pagination scenario)? Ideally without the overhead of instantiating the Models one by one and calling get_field_display().
  • Marc
    Marc over 6 years
    Gotta love Django, almost 10 years later and the answer is still valid! Thx +1 and drink on me.
  • Anoop Nair
    Anoop Nair about 4 years
    Somehow this doesn't fetch the translated text. Any idea on how to get the translated text if i18 is already implemented on the website?
  • Code-Apprentice
    Code-Apprentice about 4 years
    @AnoopNair If you still need help with figuring out how to display a translated version of the text you should post a new question.
  • benzkji
    benzkji over 3 years
    how to do this if you only specify choices in the admin/modelform (to not trigger migrations when changing them)
  • Roberth Solís
    Roberth Solís almost 3 years
    kind of model hack for me hahaha