LoginSignup
15
18

More than 5 years have passed since last update.

Djangoモデル属性命名のコツ

Posted at

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)

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18