【Django】Formを使って、超簡単にデータ登録画面・機能を作成する方法

Web

こんにちは!ゆーや(@yuyamanm118712)です。

Djangoを使ってデータ登録画面を作成するのは、とても簡単です!

この記事では、Djangoのフォーム(Form)を利用して、データベースに新しいレコードを登録するための画面を作成する方法をステップバイステップで解説します。

DjangoにおけるFormクラスとは

DjangoのFormクラスは、ユーザーからの入力データを受け取り、そのデータを検証し、必要に応じてデータベースに保存するための仕組みを提供するクラスです。フォームは、ウェブアプリケーションでユーザーが入力したデータをサーバー側で処理する際の重要な要素です。

ゆーや
ゆーや

Formクラスは、HTMLの自動生成まで担当してくれます!

Formクラスによるデータ登録画面・機能の作成

今回は

  • 一覧画面(登録結果を確認するため)
  • 登録画面

の2つの画面を作成していきます!

モデル(Model)の作成

まず最初に、データベースに保存するデータの構造を定義するために、Djangoモデルを作成します。たとえば、「Sample」というモデルを作成し、データを保存するようにします。

from django.db import models

# Sampleモデル
class Sample(models.Model):
    text_field = models.CharField(
        verbose_name="テキスト",
        max_length=10
    )

    boolean_field = models.BooleanField(
        verbose_name="True/False"
    )

    integer_field = models.IntegerField(
        verbose_name="整数"
    )

    datetime_field = models.DateTimeField(
        verbose_name="日時"
    )
ゆーや
ゆーや

マイグレーションして、テーブルを作成しておきましょう!

もし、やり方がわからない場合は以下の記事を見てください!

フォーム(Form)の作成

次に、フォームを作成します。Djangoのフォームクラスは、モデルに基づいてフォームを自動生成できるModelFormを使用するのが一般的です。

from django.forms import ModelForm
from .models import Sample

# モデルSample用のFormクラス
class SampleForm(ModelForm):
    class Meta:
        # 対象のモデル
        model = Sample
        # フィールド一覧
        fields = ["text_field", "boolean_field", "integer_field", "datetime_field"]
ゆーや
ゆーや

ModelFormを継承している関係で、Metaクラスの中で情報を設定する必要があります!

ビュー(View)の作成

次に、ビューを作成します。このビューでは、フォームを表示し、ユーザーが入力したデータをデータベースに保存します。

from django.shortcuts import render
# Viewのインポート
from django.views.generic import ListView, CreateView
# Modelのインポート
from .models import Sample
# Formのインポート
from .forms import SampleForm
# reverse_lazyのインポート
from django.urls import reverse_lazy

# トップページ
class IndexView(ListView):
    # 表示する画面
    template_name = "index.html"
    # 取得した結果を「records」と命名
    context_object_name = "records"
    model = Sample
    
# 登録画面
class InsertView(CreateView):
    # formクラスの指定
    form_class = SampleForm
    # 表示する画面
    template_name = "insert.html"
    # 登録成功した場合のリダイレクト先(アプリ名:{ursl.pyのname})
    success_url = reverse_lazy('insertapp:index')
    
    def form_valid(self, form):
        # POSTデータを取得
        data = form.save(commit=False)
        # 取得したデータを保存
        data.save()
        
        return super().form_valid(form)
ゆーや
ゆーや

CreateViewを継承しているところがポイント!

画面とのやり取りなどは特に意識していない様に見えますが、これで大丈夫!

もし、一覧画面の表示について詳しく知りたい方は以下の記事を見てください!

登録画面のテンプレートの作成

次に、フォームを表示するためのHTMLテンプレートを作成します。

{% extends "base.html" %}
{% block title %}登録画面{% endblock %}
{% block contents %}
    <div>
        <form method="POST">
            {% csrf_token %}
            テキスト:{{form.text_field}}
            <br>
            TRUE/FALSE:{{form.boolean_field}}
            <br>
            整数:{{form.integer_field}}
            <br>
            日時:{{form.datetime_field}}

            <button type="submit">登録</button>
        </form>
    </div>


{% endblock%}
ゆーや
ゆーや

ここではベーステンプレートを使用しています!

詳しく知りたい方は以下の記事を見てください!

トップページ(一覧表示)テンプレートの作成

{% extends 'base.html' %}
{% block title %}トップページ{% endblock %}
{% block contents %}
<div>
    <h1>トップページ</h1>
    <a href="http://localhost:8000/">トップページへ</a>
    <a href="http://localhost:8000/insert">登録画面へ</a>
    <table border="1"> 
        <tr>
            <td>テキスト</td>
            <td>True/False</td>
            <td>整数</td>
            <td>日時</td>
        </tr>
        <!-- for文で「records」を回す -->
        {% for record in records %}
        <tr>
            <!-- models.pyで定めた各フィールドにアクセス -->
            <td>{{record.text_field}}</td>
            <td>{{record.boolean_field}}</td>
            <td>{{record.integer_field}}</td>
            <td>{{record.datetime_field}}</td>
        </tr>
        {% endfor %}
    </table>
</div>
{% endblock %}

URLパターンの設定

最後に、ビューをURLに紐付けるために、urls.pyにパターンを追加します。

from django.urls import path
from . import views

app_name = 'insertapp'

urlpatterns = [
    path("", views.IndexView.as_view(), name="index"),
    path("insert/", views.InsertView.as_view(), name="insert")
]
ゆーや
ゆーや

一覧画面と登録画面用のurlを追加しておきます!

表示を確認

一覧画面の表示

登録画面へを押下

画面が表示されたら、値を入力しましょう!

登録ボタンを押下

新しく登録したデータが表示されていることを確認できます!

まとめ

これで、Djangoのフォームを使った簡単なデータ登録画面が完成しました。この記事では、モデルの作成から始まり、フォーム、ビュー、テンプレートの作成、そしてURLパターンの設定までを説明しました。Djangoのフォームは、入力データの検証や保存を簡単に行うための強力なツールです。

ぜひ、今回の手順を参考に、さまざまなデータ登録画面を作成してみてください。

ゆーや
ゆーや

この記事が皆さんのDjango開発に役立ったたらうれしいです!

コメント

タイトルとURLをコピーしました