Django:显示选择价值

时间:2010-12-01 02:25:40

标签: python django django-models django-templates

models.py:

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'

如何显示值('Male''Female')而不是代码('M' / 'F')?

3 个答案:

答案 0 :(得分:426)

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

模板中,您不会在方法名称中包含()。执行以下操作:

{{ person.get_gender_display }}

答案 1 :(得分:2)

  

对于每个设置了选项的字段,该对象将具有get_FOO_display()方法,其中FOO是字段的名称。此方法返回该字段的“人类可读”值。

视图中

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()

在模板中

{{ person.get_gender_display }}

Documentation of get_FOO_display()

答案 2 :(得分:-1)

其他人指出,您需要一种get_FOO_display方法。 我正在使用这个:

def get_type(self):
    return [i[1] for i in Item._meta.get_field('type').choices if i[0] == self.type][0]

遍历特定项目的所有选择,直到找到与项目类型匹配的项目为止