模型.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)
视图.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'
)?
200
是没有意义的。使用 max_lenght=1
就足够了,它将使您的网站更加高效,并且您将确保不会有错误的数据。 :)
看起来您走在正确的轨道上 - 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 }}
Documentation of 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]
它遍历特定项目的所有选项,直到找到与项目类型匹配的选项
不定期副业成功案例分享
{{ person.get_gender_display() }}