Django:显示选择价值

Sha*_*kze 215 python django django-templates django-models

模型:

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

在模板上,当我打电话给person.gender时,我得到'M'或'F'而不是'男'或'女'.如何显示值('男'或'女')而不是代码(M/F)?

jMy*_*les 460

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

在模板中,您不在方法名称中包含().请执行下列操作:

{{ person.get_gender_display }}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于使用Jinja2作为模板的任何人,您应该包含括号.`{{person.get_gender_display()}}` (10认同)
  • 大约10年后,得爱Django,答案仍然有效!Thx +1并喝我. (5认同)

Muh*_*eed 9

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

在视图中

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()
Run Code Online (Sandbox Code Playgroud)

在模板中

{{ person.get_gender_display }}
Run Code Online (Sandbox Code Playgroud)

get_FOO_display()的文档