マニュアル: Django

投稿日: 更新日:

設定

Django Debug Toolbar

これは便利で必須。

<body> がないと表示されないのに注意。

View

基本はクラスベースビューで。

Form

  • formset: 普通のフォーム
  • modelformset: モデルに紐づいたフォーム
  • inlineformset: 親と子複数をまとめて扱いたいとき

FormPreviewは使わない方がいい

formtoolsは元々はDjangoにあったが、コア機能としてあるのがふさわしくないということで、外されることになった。

特にFormPreviewは使わない方がいいと思う。

ModelForm

Model

モデルのnullとblank

これを自分の経験と合わせると次のような感じかなと。

blank null 使う場面
False False 必須項目
True True 任意項目で、nullである意味があるもの
True False 任意項目で、nullである意味がないもの
False True なし(使わない)

任意項目について説明すると、例えばURLのクエリパラメータは https://example.com/?foo= と、 https://example.com/ のように、 「キーがセットされていない」と、「キーが空である」は明示的に区別されます。

これを区別しないといけないものは、blank=True, null=Trueにします。 しかしそれ以外の場合、具体的には「入力なし=空文字列として問題がない」場合は、 blank=True, null=Falseとするといいです(defaultも設定するといいかも)。

DB的にはnullは悪です。せいぜい必要悪です。 なのでnull=Trueとするのは慎重にした方がいいです。

Modelのクラス階層

N+1問題

基本的には次の2つで解消できる。

  • 外部キーで結合している場合: select_related
  • 逆参照の場合: prefetch_related

テストで検知するときはこんな感じで。

認証認可

この記事に書いている通りで良さげ。

公式サイト

外部サイト