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)

在模板上,当我打电话给人的时候。性别,我得到“M”或“F”而不是“男性”或“女性”。

如何显示值('男性'或'女性')而不是代码('M'/'F')?


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

在模板中,不将()包含在方法的名称中。做以下几点:

{{ person.get_gender_display }}

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

在视图中

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

在模板

{{ person.get_gender_display }}

get_FOO_display()的文档


其他人指出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]

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


我通过以下方式定义常量来做到这一点:

class Person(models.Model):
    MALE = 'M'
    FEMALE = 'F'
    CATEGORY_CHOICES = (
        (MALE, 'Male'),
        (FEMALE, 'Female'),
    )

    name = models.CharField(max_length=200)
    gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
    to_be_listed = models.BooleanField(default=True)
    description = models.CharField(max_length=20000, blank=True)

M和F值将存储在数据库中,而Male和Female值将显示在各处。