Джанго: Показать значение выбора

142

Модель:

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

  • 4
    возможный дубликат значения параметров печати Django
  • 0
    Я попробовал этот метод, в моем шаблоне я использую: {% для человека в object_list%} some html {{person.get_gender_display ()}} html {% endfor%} Я получаю следующую ошибку: Значение исключения: не удалось разобрать остаток: '()' из 'person.get_gender_display ()'
Показать ещё 3 комментария
Теги:

3 ответа

306

Похоже, вы были на правильном пути - get_FOO_display() - это, безусловно, вы хотите:

В шаблонах вы не включаете() в имя метода. Выполните следующие действия:

  {{ person.get_gender_display }}
  • 0
    Этот метод бесценен. Но кроме использования метода, как можно извлечь значение, хранящееся в, скажем, {{i.item.what_to_put_here}}?
  • 0
    Я не понимаю ваш вопрос. What_to_put_here - просто метод для элемента? Если так, то ваш синтаксис правильный. Этот вопрос о конкретной ситуации именованных выборов в объекте Field.
Показать ещё 3 комментария
-1

вы можете использовать BooleanField вместо CharField,  и в модели:

BOOL_CHOICES = ((True, 'Male'), (False, 'Female'))
gender = models.BooleanField(choices=BOOL_CHOICES)
-42

Недавно я перешел за пределы 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню