2010-12-01 76 views
148

型号:Django的:显示价值选择

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',而不是'男女不限'。 如何显示值('男'或'女')而不是代码(M/F)?

+4

可能重复http://stackoverflow.com/questions/ 4274243/django-print-choices-value) – 2010-12-01 02:30:39

+0

我试过这个方法,在我使用的模板中:{%for object_list%} {html} {{person.get_gender_display()}} html {%endfor%}我是出现以下错误:异常值:\t 无法解析其余部分:'()'from'person.get_ gender_display()' – Shankze 2010-12-01 03:29:40

+2

我不好,我不应该在person.get_gender_display之后加入'()'。它的工作现在。谢谢。 – Shankze 2010-12-01 03:35:10

回答

-50

我最近超越Django的,所以我比较熟悉的Jinja2模板,但在这里我们去:

注意,它是存储在数据库中的“M”和“F”

的伪:

# Iterate through list of people 
    # Check if male 
    # output span w/ gender 

实际:

{% for person in latest_person_list2 %} 
{% if person.gender == 'M' %} 
    <span>Male</span> 
{% else %} 
    <span>Female</span> 
{% endif %} 
{% endfor %} 

对于更复杂的东西有了更多的选择它米值得编写一些逻辑来搜索元组的CATEGORY_CHOICES元组。截至目前,有两种性别选择,我不认为这是事实。

还看到:Django Template Tags

344

看起来你是在正确的轨道上 - get_FOO_display()肯定是你想要什么:

模板,你不要在方法的名称包括() 。执行以下操作:

{{ person.get_gender_display }} 
-3

你可以使用CharField, 代替,并在型号BooleanField:

BOOL_CHOICES = ((True, 'Male'), (False, 'Female')) 
gender = models.BooleanField(choices=BOOL_CHOICES) 
[Django的打印选项值(的