web-dev-qa-db-fra.com

Django: Valeur du choix d'affichage

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)

Sur le modèle, lorsque j'appelle person.gender, j'obtiens 'M' ou 'F' au lieu de 'Male' ou 'Female'.

Comment afficher la valeur ('Male' ou 'Female') à la place du code ('M'/'F')?

207
Shankze

On dirait que vous êtes sur la bonne voie - get_FOO_display() est très certainement ce que vous voulez:

Dans templates , vous n'incluez pas () dans le nom d'une méthode. Faites ce qui suit:

{{ person.get_gender_display }}
441
jMyles

Pour chaque champ pour lequel des choix sont définis, l'objet aura une méthode get_FOO_display (), où FOO est le nom du champ. Cette méthode renvoie la valeur "lisible par l’homme" du champ.

Dans les vues

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

Dans le modèle

{{ person.get_gender_display }}

Documentation de get_FOO_display ()