template from enum choices python django

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)