公式
フォーム
- formset: 普通のフォーム
- modelformset: モデルに紐づいたフォーム
- inlineformset: 親と子複数をまとめて扱いたいとき
認証認可
この記事に書いている通りで良さげ。
モデルの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とするのは慎重にした方がいいです。
ModelForm
- ラベルだけ変更したい: label_for_instanceを定義する
Modelのクラス階層
- django.db.models
- django.db.models.fields
__init__.py
- Field
- RegisterLookupMixinを継承している。
- BooleanField
- その他基本的なモデルのフィールドの定義が格納されている。
- Field
- django.db.models.fields.files: ファイル関連
- django.db.models.fields.related: ForeignKey, OneToOneField, ManyToManyField
- django.db.models.functions: SQLの関数
- django.db.models.sql: SQL関連(サブクエリとか)
- django.db.models.fields