Django:显示select值

模型:

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

看起来你是在正确的轨道上 – 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 

实际:

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

对于有更多select的更复杂的东西,可能需要编写一些逻辑来search元组的CATEGORY_CHOICES元组。 到目前为止,有两个性别select,我不认为是这样。

另请参阅: Django模板标签