プログラミング初心者でも安心! Djangoモデルフィールドのverbose_name徹底解説


django.db.models.db.models.Field.verbose_name は、Django モデルフィールドの人読みやすい名前を設定するための属性です。この属性を設定することで、Django 管理画面やフォームフィールドなどで、より分かりやすい名前を表示することができます。

設定方法

verbose_name 属性は、モデルフィールドを定義する際に、最初の引数として設定します。

from django.db import models

class MyModel(models.Model):
    # フィールド名: 人読みやすい名前
    first_name = models.CharField(max_length=255, verbose_name='氏名')
    email = models.EmailField(verbose_name='メールアドレス')

上記のように設定すると、Django 管理画面やフォームフィールドでは、以下のようになります。

  • メールアドレス
  • 氏名

デフォルトの動作

verbose_name 属性が設定されていない場合、Django はフィールド名スペースで区切って変換したものを人読みやすい名前として使用します。

class MyModel(models.Model):
    my_field = models.CharField(max_length=255)

上記のように設定すると、Django 管理画面やフォームフィールドでは、My Field と表示されます。

注意点

  • 複数のフィールドで同じ verbose_name 属性を設定することはできません
  • verbose_name 属性は、データベースのフィールド名とは関係ありません。
  • ユーザーインターフェースがより直感的になります。
  • コードの可読性が向上します。
  • モデルフィールドをより分かりやすく表現することができます。


from django.db import models

class MyModel(models.Model):
    first_name = models.CharField(max_length=255, verbose_name='氏名')
    last_name = models.CharField(max_length=255, verbose_name='苗字')
    email = models.EmailField(verbose_name='メールアドレス')
    phone_number = models.CharField(max_length=20, verbose_name='電話番号')
from django.db import models

class MyModel(models.Model):
    first_name = models.CharField(max_length=255, verbose_name='First Name')
    last_name = models.CharField(max_length=255, verbose_name='Last Name')

    class Meta:
        verbose_name = 'マイモデル'
        verbose_name_plural = 'マイモデル一覧'

例3:ユニークな制約

from django.db import models

class MyModel(models.Model):
    first_name = models.CharField(max_length=255, verbose_name='氏名')
    last_name = models.CharField(max_length=255, verbose_name='苗字')

    class Meta:
        unique_together = ('first_name', 'last_name')

        error_messages = {
            'unique_together': 'この氏名と苗字の組み合わせは既に登録されています。',
        }

例4:カスタム属性

from django.db import models

class MyModel(models.Model):
    first_name = models.CharField(max_length=255, verbose_name='氏名')
    last_name = models.CharField(max_length=255, verbose_name='苗字')

    def get_full_name(self):
        return f'{self.last_name} {self.first_name}'

    full_name = models.CharField(max_length=255, editable=False, verbose_name='フルネーム', **{
        'default': get_full_name,
    })
  • カスタム属性を使用して、verbose_name 属性を動的に生成することができます。
  • error_messages 属性を使用して、カスタムエラーメッセージを設定することができます。
  • Meta クラスを使用して、モデル全体の verbose_nameverbose_name_plural を設定することができます。
  • verbose_name 属性は、モデルフィールドを定義する際に、最初の引数として設定します。


モデルフォームの labels 属性

モデルフォームを使用する場合は、labels 属性を使用して、各フィールドの人読みやすい名前を設定することができます。

from django.db import models
from django.forms import ModelForm

class MyModel(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ('first_name', 'last_name')

        labels = {
            'first_name': '氏名',
            'last_name': '苗字',
        }

テンプレートにおける verbose_name 変数

Django テンプレートでは、verbose_name 変数を使用して、モデルフィールドの人読みやすい名前を取得することができます。

{{ form.first_name.verbose_name }}: {{ form.first_name }}

{{ form.last_name.verbose_name }}: {{ form.last_name }}

カスタム属性

カスタム属性を使用して、モデルフィールドの人読みやすい名前を動的に生成することができます。

from django.db import models


class MyModel(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    def get_full_name(self):
        return f'{self.last_name} {self.first_name}'

    full_name = models.CharField(max_length=255, editable=False, verbose_name='フルネーム', **{
        'default': get_full_name,
    })

サードパーティライブラリ

django-model-fields のようなサードパーティライブラリを使用して、モデルフィールドの verbose_name 属性をより柔軟に設定することができます。

利点と欠点

それぞれの代替方法には、利点と欠点があります。

  • サードパーティライブラリ
    • 利点: 柔軟性が高く、様々な機能を提供している。
    • 欠点: 導入や設定の手間がかかる。
  • カスタム属性
    • 利点: 柔軟性が高く、動的な表示名を生成できる。
    • 欠点: コードが複雑になる可能性がある。
  • テンプレートにおける verbose_name 変数
    • 利点: テンプレートで柔軟に表示名を変更できる。
    • 欠点: テンプレートコードが煩雑になる可能性がある。
  • モデルフォームの labels 属性
    • 利点: モデルフォームを使用している場合はシンプルで分かりやすい。
    • 欠点: モデルフォームを使用していない場合は使用できない。