python - from - Django: Display Choice Value
get choices django (3)
Modelo:
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)
En la plantilla, cuando llamo person.gender, obtengo ''M'' o ''F'' en lugar de ''Male'' o ''Female''. ¿Cómo se muestra el valor (''Hombre'' o ''Mujer'') en lugar del código (M / F)?
Parece que estabas en el camino correcto: get_FOO_display() es lo que realmente deseas:
En plantillas, no incluye () en el nombre de un método. Haz lo siguiente:
{{ person.get_gender_display }}
Recientemente me mudé más allá de Django, así que estoy más familiarizado con la creación de plantillas Jinja2, pero aquí vamos:
Tenga en cuenta que se almacena en la base de datos como ''M'' y ''F''
Psuedo:
# Iterate through list of people
# Check if male
# output span w/ gender
Real:
{% for person in latest_person_list2 %}
{% if person.gender == ''M'' %}
<span>Male</span>
{% else %}
<span>Female</span>
{% endif %}
{% endfor %}
Para algo más complejo con más opciones, podría valer la pena escribir algo de lógica para buscar a través de la tupla CATEGORY_CHOICES de tuplas. A partir de ahora, con dos opciones para el género, no veo que ese sea el caso.
también ver: Etiquetas de Plantilla Django
puede usar BooleanField en lugar de CharField, y en el modelo:
BOOL_CHOICES = ((True, ''Male''), (False, ''Female''))
gender = models.BooleanField(choices=BOOL_CHOICES)