Django モデルからフォーム画面を作成 [ModelForm]

2019年11月7日

Djangoでフォーム画面を作成します。

 

Djangoにおいてフォーム画面の作成には、「Formクラス」または「ModelFormクラス」を利用する場合の2つに分けられます。本記事ではModelFormクラスによる作成を説明します。

 

フォーム画面作成の基本 [Form]

 

上記リンク先ページでは、「Formクラス」を継承したUserFormクラスを作成し、その中にnameやemailなどのフィールドを一つずつ記述していきました。しかし、あらかじめデータベースにおける「モデル」が存在する場合は、「ModelFormクラス」を利用するとフォーム画面が構築しやすくなります。

 

SQLiteの利用(マイグレーション等)やモデル(models.py)自体がわからない場合は、下記の関連ページをご覧下さい。

 

DjangoでSQLiteを利用する

 

モデルの一覧表示画面を作成する

 

 

本記事ではuserという名前のアプリケーションを作成し、また下記のようにnewとlistのテンプレート(内容は後述)を用意してある前提で話を進めます。

 

 

アプリケーション概要


 

これから下記のMemberモデルによるテーブルに登録できるフォーム画面を作成していきます。

 

user/models.py

 

画面遷移の様子は下記のようになります。フィールドが未入力だと「このフィールドは必須です。」というエラーメッセージが表示されます。登録完了すると、user/list画面に遷移し一覧表が表示されます。

 

 

 

ModelForm


 

userディレクトリ内にforms.pyを作成し下記のように記述します。ModelFormクラスを継承したUserFormクラスを作成しています。

 

user/forms.py

8行目

画面に表示させるフィールドを指定しています。下記のように指定すると、作成したモデルのすべてのフィールドを取得できます。

 

 

次にビュー関数を作成します。

 

user/views.py

10行目

is_valid()メソッドでMemberモデルのバリデーションが実行されます。問題ない場合はsave()メソッドでデータが保存され、user/listへリダイレクトされます。listの画面については上述した関連ページにて説明しています。

 

15行目

各フィールドのエラーメッセージ(「このフィールドは必須です。」等)をテンプレートに表示させるためのformインスタンスを渡しています。

 

 

テンプレートを下記のように編集します。

 

user/templates/user/new.html

11行目

novalidateで、ブラウザ自体のバリデーション機能を無効にしています。

 

 

リダイレクト先のテンプレートです。

 

user/templates/user/list.html

 

userディレクトリ内にurls.pyを作成し、下記のように編集します。

 

user/urls.py

 

 

本記事ではバリデーションの細かい説明をしませんでしたが、下記関連ページもご覧下さい。

バリデーション設定の基本 [validation]

 

 

 

参照ページ


 

django ドキュメント
モデルからフォームを作成する

 

フォームを使う

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー