2010-12-01 51 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的打印選項值(的