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'
)?
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 }}
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 }}