web-dev-qa-db-ja.com

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'または'F'ではなく、'Male'または'Female'が返されます。

コード('Male'/'Female')の代わりに値('M'または'F')を表示する方法は?

196
Shankze

あなたは正しい軌道に乗っていたように見えます- get_FOO_display() はあなたが望むものです。

templatesでは、メソッドの名前に()を含めません。以下をせよ:

{{ person.get_gender_display }}
431
jMyles

選択肢が設定されているすべてのフィールドについて、オブジェクトには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()のドキュメント

4
Timma