概要
PythonのフレームワークであるDjangoを学習していたところ、モデルを定義するMetaクラスのオプション、db_table、verbose_name、verbose_name_pluralについて違いなどが分からなかったため、公式ドキュメント等を確認してみました。しかし、使い分ける方法など求めている情報がなかなか見当たらず、情報もまとまっていなかったため今回整理してみました。
db_table とは?
- 役割:データベース上で使われるテーブル名を指定します。
- 指定しない場合:自動的に
<app名>_<モデル名(小文字)>
という形式でテーブルを作成します。
(例:app名がbookstore
、モデル名がBook
の場合、テーブル名はbookstore_book
)
使用例)
class Book(models.Model):
title = models.CharField(max_length=100)
class Meta:
db_table = "library_books"
- この場合、テーブル名は
library_books
になります。
verbose_name とは?
- 役割:管理画面にてモデルの表示名を指定します。
- 指定しない場合:自動的に
<モデル名(小文字)>
が設定されます。
(例:モデル名がBook
の場合、表示名はbook
) - 英語のモデル名から、日本語などの分かりやすい表示名へ変更するために使用します。
使用例)
class Book(models.Model):
title = models.CharField(max_length=100)
class Meta:
verbose_name = "書籍"
verbose_name_plural とは?
- 役割:管理画面にてモデルの複数形の表示名を指定します。
(例:「書籍」というモデルの「書籍一覧」など) - 指定しない場合:自動的に
<(verbose_name) + "s">
が設定されます。
(例:verbose_name="book" の場合、表示名はbooks
) - verbose_name="書籍"と設定し、verbose_name_pluralを設定しなかった場合、「書籍s」となり不自然となります。
- また、verbose_name="category" と設定し、verbose_name_plural を設定しなかった場合、本来複数形であれば
categories
と表示されるべきですが、categorys
と表示されます。(英語の複数形変換は自動で正確にならないこともあり注意が必要)
使用例)
class Book(models.Model):
title = models.CharField(max_length=100)
class Meta:
verbose_name_plural = "書籍一覧"
実際の活用例
例えば、図書館システムを作るときに以下のように書くと、開発者や運用者双方に優しい設計になります。
class Book(models.Model):
title = models.CharField(max_length=100)
class Meta:
db_table = "library_books"
verbose_name = "書籍"
verbose_name_plural = "書籍一覧"
- データベースレベルでは「library_books」というテーブル名になり、 管理画面では「書籍」「書籍一覧」と表示され、直感的で分かりやすい名称になります。
まとめ
db_table は開発者がデータベースを管理しやすくするための設定であり、
verbose_name と verbose_name_plural は運用者が管理画面を使いやすくするための設定と言えます。それぞれの役割を理解し、適切に設定することでプロジェクト全体がスムーズに運用できると考えます。
▼具体的な比較は以下の表にまとめました。
オプション | 役割 | 主に影響する場所 |
---|---|---|
db_table | データベースのテーブル名を指定 | データベース |
verbose_name | 管理画面にてモデル表示名を指定 | 管理画面 |
verbose_name_plural | 管理画面にてモデルの複数形表示名を指定 | 管理画面 |
▼verbose_name と verbose_name_plural の指定による表示名の違いについて、以下の表にまとめました。
(表示例:モデル名はBook
、指定する場合 verbose_name には書籍
、verbose_name_plural には書籍一覧
を指定)
設定 | 表示結果 | 表示例 |
---|---|---|
両方指定しない | verbose_name:<モデル名(小文字)> verbose_name_plural: <(verbose_name) + "s">
|
verbose_name:book verbose_name_plural: books
|
verbose_name のみ指定 | verbose_name:指定した値 verbose_name_plural: <(verbose_name) + "s">
|
verbose_name:書籍 verbose_name_plural: 書籍s
|
verbose_name_plural のみ指定 | verbose_name:<モデル名(小文字)> verbose_name_plural: 指定した値
|
verbose_name:book verbose_name_plural: 書籍一覧
|
両方指定する | verbose_name:指定した値 verbose_name_plural: 指定した値
|
verbose_name:書籍 verbose_name_plural: 書籍一覧
|