Djangoで開発する際に重要な、Model命名規約の標準を検討しました。
モデル命名について
- キャメルケースで書く
-
トランザクション/マスタなどModelごとの区別が出来るようにするため、接頭語を設ける
- マスタには
Mst
とつける - 連携用モデルには、
Itfc
とつける - トランザクションには接頭語をつけない
- マスタには
プロジェクトの特性にもよるが、英単語の方が望ましい
属性名について
- スネークケースで書く
- 以下の接頭語/接尾語を使う
- そのモデルの名前、コード、番号を表すのであれば、接頭語/接尾語を使わず
name
,cd
などシンプルな属性名にする(以下、例の通りコードがシンプルで直感的になる)
属性の種類 | 命名 | 備考 |
---|---|---|
名前 | *_name | 自分のモデルの名前の場合は、 name
|
コード | *_cd | 自分のモデルのコードの場合は、 cd
|
ID | *_id | |
番号, No | *_no | 自分のモデルの番号の場合は、 no
|
日にち | *_date | |
日時 | *_dt | |
数値 | *_num | |
区分値 | *_type | |
真偽値, フラグ | is_* | |
ファイル | *_file | |
ForeignKey | 参照先の属性名をスネークケースで書く ※1 | |
ManyToManyField | 参照先の属性名をスネークケースで書き、複数形にする |
※1 ForeignKey はテーブルのカラムになると、属性名 + _id が自動付番される。参照先のモデル名を付けるとテーブルになった時に自然な名前になる
主キーについて
Djangoでは、モデルに主キーを明示的に設定しない場合は、id というカラムが作られ、連番が自動で付番される。
ケースによりますが、経験的には以下の様に使い分けると良い。
- マスタデータはなるべくこの連番を使わず、明示的に主キーを割り当てた方が良い。
- トランザクションデータは、この連番を使った方が良い。
例
以下の例で、cd, name を item_cd, item_name などと名付けてしまいがち。
models.py
class Item(models.Model):
cd = models.CharField("コード", max_length=10)
name = models.CharField("名前", max_length=100)
material_type = models.CharField("原材料区分", max_length=1, choices=ITEM_TYPE_CHOICES)
is_enabled = models.BooleanField("有効フラグ", )
factory = models.ForeignKey(Factory, verbose_name=_("工場"), null=True, blank=True)
item = Item(cd="i01", name="品物1", ・・・)
# cd, nameなどの名前にすると簡潔になる
print(item.cd)
print(item.name)
# item_cd, item_name だとくどい
print(item.item_cd)
print(item.item_name)
# ForeignKey が絡むと更に簡潔さが増す
print(item.factory.name)