问题:Django:显示选择值
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'
or 'F'
而不是'Male'
or 'Female'
。
如何显示值('Male'
或'Female'
)而不是代码('M'
/ 'F'
)?
回答 0
回答 1
对于每个设置了选项的字段,该对象将具有get_FOO_display()方法,其中FOO是字段的名称。此方法返回该字段的“人类可读”值。
在视图中
person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()
在模板中
{{ person.get_gender_display }}
回答 2
其他人指出,您需要的是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]
遍历特定项目的所有选择,直到找到与项目类型匹配的项目