Djangoで、フォームセットを使うシリーズ

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

プログラミング全般 - シリーズ、まとめ、チュートリアル
2018年12月1日10:37に更新(約12日前)
2018年10月17日5:38に作成(約57日前)

旧ブログ移行記事です。

Djangoにはフォームセットという、複数のフォームを扱うための機能があります。

モデルフォームセット

基本的な使い方

Django、モデルフォームセットを使うでは、モデルフォームセットの基本的な使い方を説明しています。モデルフォームセットは他のフォームセットと比べるとシンプルなので、取っつきやすいと思います。

モデルフォームセット + ページング

Djangoで、モデルフォームセット+ページングでは、モデルフォームセットを絞り込んだりページネーションしたりしています。

インラインフォームセット

基本的な使い方

先にモデルフォームセットの基本的な使い方を見るとわかりやすいかもしれません。
Django、インラインフォームセットを使う

ManyToManyFieldをインラインで表示

ManyToManyFieldで紐づいたものをインラインで設定することもできます。
Djangoで、ManyToManyFieldをインラインで表示
本来ManyToManyはselect要素での複数選択やチェックボックスになりますが、select要素等で1つずつ指定できるようになります。

GenericForeignKey

ForeignKeyは通常ある一種類のモデルに紐づきます。しかし、他のモデルにも紐づけたい場合もあります。記事にファイルを添付でき、コメントにもファイルを添付できるとして、Fileモデルは2種類必要でしょうか。 GenericForeignKeyを使うと1種類で済ますことができます。
Djangoで、GenericForeignKeyを使う

2種類のインラインフォームセットを使う

Djangoで、2種類のインラインフォームセットを使う

フォームセット

使う頻度は少し少ないですが、通常のフォーム...forms.Formのフォームセットもあります。

複数の検索フォーム

Djangoで、通常のフォームセットを使うでは、検索フォームを複数置く例を紹介しています。「年収が600万円以上の男性、もしくは年収300万円以上で身長が180以上体重70以下、もしくは年収不問でルックスがイケメン」のような凝った検索をする際には有用かもしれません。

ファイルの複数アップロード

Djangoで、ファイルアップロードでは、モデルを使わないでファイルをアップロード&ファイルURLを返す通常のフォームを定義し、それのフォームセット版も紹介しています。

Tips

追加ボタン

自作ページでのインラインフォームはページが表示された段階でフォームの数が決まっています。管理画面のように、ボタンを押すことでフォームを追加できるようにします。
Djangoで、自作ページのインラインフォームに追加ボタン

commit=Falseでのsave

モデルフォームはcommit=False引数をつけてsaveメソッドが呼べましたが、モデルフォームセット、インラインフォームセットも同様です。いくつか注意点があります。
Django、インラインフォームセットでcommit=Falseを使う

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

記事にコメントする