Django DB値ではなくchoicesで設定した読みやすい方の値を画面表示する

Djangoのモデルで下記のようにchoicesを設定してフォーム上の選択肢を定義しておくことがあると思いますが、フォーム以外のテンプレート上でchoices設定したフィールドを{{ foo.bar }} とやってみてもDB値が表示されてしまいます。
かといってテンプレートで{% if foo.country == ‘A’ %}Japan{% endif %} のように場合分けするのもテンプレートの各所に書かれていたら修正が面倒です。

このような時、実はDB値ではなくchoicesで設定した読みやすい値の方を呼び出す簡単な方法があります。それはテンプレート上で{{ foo.get_fieldName_display }} と書くだけです。
下記モデルの場合であれば、{{ foo.get_country_display }}と書けばDB値に対応した読みやすい方の値を画面に表示してくれます。

より詳しくは公式ドキュメントのModel.get_FOO_display()をご参照ください。

 

models.py
class Country(models.Model):
    COUNTRY = (
        ('A', 'Japan'),  # (DB値, 読みやすい値)
        ('B', 'America'),
        ('C', 'China'),
    )
    
    country = models.CharField(max_length=1, choices=COUNTRY)
sponsor