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'
)を表示する方法は?
あなたは正しい軌道に乗っていたように見えます- get_FOO_display()
はあなたが望むものです。
templatesでは、メソッドの名前に()
を含めません。以下をせよ:
{{ 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 }}