Django

Pythonフレームワーク「Django」の「ModelForm」を利用してMySQLに接続してみた

Django(ジャンゴ)内の「ModelForm」を利用すると、データベースとアクセスするModelクラスと連動するFormを作成することになり、ユーザーがFormで入力した値をデータベースに直接保存することができる。

今回は、MySQLのデータベースのテーブルにユーザー情報を登録する処理を、ModelFormを利用して実装してみたので、そのサンプルプログラムを共有する。

なお、FormクラスとModelFormクラスの違いについては、以下のサイトを参照のこと。
https://kosuke-space.com/django-modelform

前提条件

下記記事の実装が完了していること。

Pythonフレームワーク「Django」を利用してMySQLのテーブルにデータ登録する処理を実装してみたDjango(ジャンゴ)を利用すると、PythonによるWebアプリケーションを作成することができて、データベースへの接続も行うことがで...

サンプルプログラムの作成

作成したサンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。また、「0002_alter_userdata_birth_day_alter_userdata_birth_month_and_more.py」はマイグレーション後に作成されるプログラムのため、ここでは赤枠を付与していない。

demoフォルダ下、models.pyの内容は以下の通りで、ユーザーデータを登録するテーブル(user_data)の各項目に対する指定可能なデータを設定している。また、「__str__」メソッドの追加により、各項目値を文字列で表示できるようにしている。

demoフォルダ下、forms.pyの内容は以下の通りで、user_dataテーブルへアクセスするためのモデルに準じた(ModelFormクラスを継承した)フォームであるUserDataModelFormクラスと、UserDataModelFormクラスに項目を追加したInputModelFormクラスを定義している。

なお、上記UserDataModelFormクラス内のcleanメソッドで、独自チェックを実装している。独自チェック処理については、以下のサイトを参照のこと。
https://yu-nix.com/archives/django-form-validation/

demoフォルダ下、views.pyの内容は以下の通りで、InputModelFormクラスを利用した入力チェック処理や、user_dataテーブルへの登録処理を行うようにしている。

また、demoフォルダ下、templatesフォルダ下の入力画面(input.html)・確認画面(confirm.html)の内容は以下の通りで、InputModelFormクラスのフォームを利用するようにしている。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/python/tree/master/django-mysql-modelform/djangoApp



削除または保存していないWordドキュメントの復元方法【4DDiG Windowsデータ復元】ワード(Word)データ等のファイルを誤って削除してしまった場合は、通常はデータの復元ができませんが、4DDiGというソフトウェアを利用...

マイグレーションの実行

前提条件の記事で、マイグレーション(アプリケーションで使うデータベースの定義を自動的に作成・管理する機能)を実行したが、今回もmodels.pyを編集したため、再度マイグレーションを実行する。

マイグレーションの実行方法は、以下の記事の「マイグレーションの実行」を参照のこと。ただし、user_dataテーブルは削除せず、作成済の状態でマイグレーションを実行すること。

Pythonフレームワーク「Django」を利用してMySQLのテーブルにデータ登録する処理を実装してみたDjango(ジャンゴ)を利用すると、PythonによるWebアプリケーションを作成することができて、データベースへの接続も行うことがで...

コマンドプロンプト上で「python manage.py makemigrations (Djangoアプリケーション名)」コマンドを実行すると、以下の赤枠のファイルが作成されることが確認できる。
マイグレーションの実行_1

また、コマンドプロンプト上で「python manage.py showmigrations」コマンドを実行すると、以下のように、マイグレーション履歴が確認できる。
マイグレーションの実行_2

なお、マイグレーション後のuser_dataテーブルの定義を確認すると以下の通りで、マイグレーション前と同じ内容になっている。
マイグレーションの実行_3



フリエン(furien)は多くの案件を保有しフリーランス向けサービスも充実しているエージェントだったフリエン(furien)は、ITフリーランス(個人事業主)エンジニア専門のエージェントであるアン・コンサルティング株式会社が運営する業界...

サンプルプログラムの実行

サンプルプログラムの実行結果は以下の通りで、画面で入力したユーザーデータがuser_dataテーブルに追加されると共に、実行したSQLがログ出力されることが確認できる。

1) 実行前のuser_dataテーブルの中身は、以下の通り。

サンプルプログラムの実行結果_1

2) コマンドプロンプトでDjangoプロジェクト名のフォルダに移動し、コマンドプロンプトで「python manage.py runserver」コマンドを実行して、Webサーバーを起動する。
サンプルプログラムの実行結果_2

3) 何も入力せず「確認」ボタンを押下すると、以下のようなエラーメッセージが表示されることが確認できる。なお、下記は「名前」の例だが、「入力確認」も同様のエラーメッセージが表示される。
サンプルプログラムの実行結果_3

4) 生年月日に存在しない日付を入力し「確認」ボタンを押下すると、以下のようなエラーメッセージが表示されることが確認できる。
サンプルプログラムの実行結果_4

5) 以下のように、入力画面で値を設定し確認画面で「送信」ボタンを押下すると、画面で入力したユーザーデータがuser_dataテーブルに追加されることが確認できる。また、このときに追加されたidは3(登録済のidの最大値+1)となっている。
サンプルプログラムの実行結果_5_1

サンプルプログラムの実行結果_5_2 サンプルプログラムの実行結果_5_3

6) 実行後のuser_dataテーブルの中身は以下の通りで、id=3のデータが追加されたことが確認できる。

サンプルプログラムの実行結果_6

7) このときのコンソールログを確認すると、以下の赤枠のように、SQLの実行ログが出力されていることが確認できる。
サンプルプログラムの実行結果_7

要点まとめ

  • Django内の「ModelForm」を利用すると、データベースとアクセスするModelクラスと連動するFormを作成することになり、ユーザーがFormで入力した値をデータベースに直接保存することができる。
  • ModelFormを利用したフォームクラスで項目を追加する場合は、ModelFormクラスを継承したサブクラスを親にもつFormクラスに定義する。