この記事で詳しく説明されている。
理解のためにサンプルプロジェクトを作って確認した。
ManyToManyField のみ
- 中間テーブルは Django が自動作成する
bookmark_tags
- 中間テーブルのモデルは定義しない(できない)
- admin では中間テーブルは透過的に利用される
- ブックマークにタグをつける操作だけでよく、直感的で、利用しやすい
ManyToManyField + through
- 中間テーブルを自分で定義する
tag2bookmark
- 中間テーブルのモデルに属性を自由に定義できる
tagged_at
- admin で中間テーブルをうまく使うには InlineModelAdmin を使う必要がある
- django: how does manytomanyfield with through appear in admin? - Stack Overflow
- https://docs.djangoproject.com/en/3.1/ref/contrib/admin/#working-with-many-to-many-intermediary-models
- admin の UI はゴツくてわかりづらく、操作しにくい
- Form をカスタマイズすれば見栄えと操作性を改善できるかも