Модель:
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)
В шаблоне, когда я вызываю person.gender, я получаю 'M' или 'F' вместо 'Male' или 'Female'. Как отобразить значение ( "Мужской" или "Женский" ) вместо кода (M/F)?
Похоже, вы были на правильном пути - get_FOO_display() - это, безусловно, вы хотите:
В шаблонах вы не включаете() в имя метода. Выполните следующие действия:
{{ person.get_gender_display }}
вы можете использовать BooleanField вместо CharField, и в модели:
BOOL_CHOICES = ((True, 'Male'), (False, 'Female'))
gender = models.BooleanField(choices=BOOL_CHOICES)
Недавно я перешел за пределы Django, поэтому я больше знаком с шаблонами Jinja2, но здесь мы идем:
Обратите внимание, что он хранится в базе данных как "M" и "F"
псевдопользователей:
# Iterate through list of people
# Check if male
# output span w/ gender
Actual:
{% for person in latest_person_list2 %}
{% if person.gender == 'M' %}
<span>Male</span>
{% else %}
<span>Female</span>
{% endif %}
{% endfor %}
Для чего-то более сложного с большим количеством вариантов, возможно, стоит написать некоторую логику для поиска кортежей CATEGORY_CHOICES. На данный момент, с двумя вариантами для пола, я не вижу, что это так.
также см.: Теги шаблона Django