カテゴリ: Django 更新日: 2026/04/13

Django ModelFormで編集フォームを作る方法をやさしく解説|既存データの更新処理入門

Django ModelFormで編集フォームを作る方法|既存データの更新処理
Django ModelFormで編集フォームを作る方法|既存データの更新処理

先生と生徒の会話形式で理解しよう

生徒

「Djangoで、すでに登録されているデータを編集する画面って、どうやって作るんですか?」

先生

「Djangoでは、ModelFormを使うと、編集フォームもとても簡単に作れます。データベースの内容を、そのまま画面に表示して変更できます。」

生徒

「パソコンをほとんど触ったことがなくても大丈夫ですか?」

先生

「大丈夫です。ノートに書いた内容を書き直すような感覚で考えると、すぐに理解できますよ。」

1. Django ModelFormとは何かを超かんたんに理解しよう

1. Django ModelFormとは何かを超かんたんに理解しよう
1. Django ModelFormとは何かを超かんたんに理解しよう

DjangoのModelFormとは、データベースの設計図である「モデル」から、自動で入力フォームを作ってくれる便利な仕組みです。ふつう、入力画面を作るには項目を一つずつ書く必要がありますが、ModelFormを使うと、その手間が大きく減ります。

初心者の方は、「ModelForm=紙の申込書を自動で作ってくれる機械」と考えてください。しかも、その申込書は、すでに書かれている内容を表示して、書き直すこともできます。これが編集フォームです。

2. 編集フォームで必要になる既存データ更新の考え方

2. 編集フォームで必要になる既存データ更新の考え方
2. 編集フォームで必要になる既存データ更新の考え方

既存データの更新とは、すでに保存されている情報を書き換えることです。たとえば、名前やメールアドレスを登録したあとに、「間違えたから直したい」という場面を想像してください。

Djangoでは、「どのデータを直すのか」を指定し、そのデータをフォームに表示してから、変更した内容を保存します。この流れを理解すれば、編集処理は怖くありません。

3. 例として使うシンプルなモデルを確認しよう

3. 例として使うシンプルなモデルを確認しよう
3. 例として使うシンプルなモデルを確認しよう

まずは、とても単純なモデルを使って説明します。ここでは、名前と年齢を保存するモデルを用意します。モデルとは、データベースの中身を決める設計図のことです。


from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()

    def __str__(self):
        return self.name

このモデルは、「名前」と「年齢」という二つの情報を保存します。とてもシンプルなので、初心者の方でも安心して読めます。

4. ModelFormを使って編集用フォームを作る方法

4. ModelFormを使って編集用フォームを作る方法
4. ModelFormを使って編集用フォームを作る方法

次に、ModelFormを使ってフォームを作ります。フォームとは、画面に表示される入力欄のことです。ModelFormでは、どのモデルを使うかを指定するだけでOKです。


from django import forms
from .models import Person

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ['name', 'age']

ここでは、「Personモデルを使います」「名前と年齢をフォームに出します」と書いています。難しい英単語が出てきますが、今は「モデルとフォームをつなげている」と理解すれば十分です。

5. ビューで既存データを読み込んで編集する

5. ビューで既存データを読み込んで編集する
5. ビューで既存データを読み込んで編集する

ビューとは、画面表示や処理の流れをまとめた場所です。編集フォームでは、「どの人のデータを編集するか」を指定して、その情報をフォームに入れます。


from django.shortcuts import render, get_object_or_404, redirect
from .models import Person
from .forms import PersonForm

def edit_person(request, person_id):
    person = get_object_or_404(Person, id=person_id)

    if request.method == 'POST':
        form = PersonForm(request.POST, instance=person)
        if form.is_valid():
            form.save()
            return redirect('person_detail', person_id=person.id)
    else:
        form = PersonForm(instance=person)

    return render(request, 'edit_person.html', {'form': form})

instanceとは、「このデータ本人」という意味です。ここでは、「この人の情報をフォームに入れてね」とDjangoに伝えています。

6. テンプレートで編集フォームを表示する

6. テンプレートで編集フォームを表示する
6. テンプレートで編集フォームを表示する

テンプレートは、実際に画面に見えるHTMLです。編集フォームも、基本は新規作成と同じで、とてもシンプルに書けます。


<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="btn btn-primary">更新する</button>
</form>

ボタンを押すと、入力した内容でデータが上書き保存されます。ノートの文字を書き直す感覚と同じです。

7. 編集処理でよくある失敗と注意点

7. 編集処理でよくある失敗と注意点
7. 編集処理でよくある失敗と注意点

初心者の方がよくつまずくのは、「instanceを書き忘れる」ことです。これを忘れると、新しいデータが作られてしまいます。必ず「どのデータを編集するか」を指定しましょう。

また、URLでIDを受け取ることで、「この人の情報」という目印をDjangoに渡しています。これは、名札を見て本人を確認するイメージです。

8. Django ModelForm編集処理の全体の流れを整理

8. Django ModelForm編集処理の全体の流れを整理
8. Django ModelForm編集処理の全体の流れを整理

Django ModelFormを使った編集フォームは、「モデルを用意する」「ModelFormを作る」「ビューで既存データを読み込む」「テンプレートで表示する」という流れです。

この仕組みを理解すると、Djangoでのデータ更新処理が一気に楽になります。初心者の方でも、少しずつ手を動かせば、必ず理解できます。

まとめ

まとめ
まとめ

この記事では、DjangoのModelFormを使って既存データを編集し、更新する方法について、初心者の方でも理解できるように順を追って解説してきました。ModelFormは、Djangoの中でも特に便利な仕組みで、データベースの設計図であるモデルをもとに、入力フォームや編集フォームを自動で作ってくれます。これにより、フォームの項目を一つひとつ手作業で書く必要がなくなり、コード量も減り、ミスも起きにくくなります。

編集フォームの最大のポイントは、「すでに存在するデータをフォームに表示して、その内容を上書き保存する」という考え方です。Djangoでは、この仕組みを instance という指定で実現します。ビューの中で、どのデータを編集するのかを明確にし、そのデータをModelFormに渡すことで、画面には最初から値が入った状態のフォームが表示されます。これは、ノートに書いた文字を消して書き直す感覚にとても近く、初心者の方でもイメージしやすい流れです。

また、POSTリクエストとGETリクエストの役割の違いも重要でした。GETのときは、編集画面を表示するために既存データをフォームへ入れ、POSTのときは、送信された内容をチェックして正しければ保存します。この「表示」と「保存」の役割分担を理解することで、Djangoのフォーム処理全体が整理されて見えるようになります。

テンプレート側では、特別に難しいことをする必要はありません。{{ form.as_p }} を使えば、ModelFormで定義した項目が自動的にHTMLとして表示されます。CSRFトークンを忘れずに書き、送信ボタンを用意すれば、編集フォームとして十分に機能します。HTMLやCSSにまだ慣れていない方でも、最低限の記述で動く点は、Djangoの大きな魅力です。

よくある失敗として、「instanceを指定しなかったために新規データが作成されてしまう」という点も確認しました。編集処理では、必ず「どのデータを対象にするのか」を意識することが大切です。URLからIDを受け取り、そのIDを使ってデータを取得し、ModelFormに渡す。この流れを毎回意識することで、意図しない動作を防げます。

DjangoのModelFormを使った編集処理は、Webアプリケーション開発の中でも非常によく使われる基本機能です。ユーザー情報の変更、商品情報の更新、投稿内容の修正など、さまざまな場面で応用できます。今回学んだ内容をしっかり身につけておくことで、Djangoを使った開発の幅が大きく広がります。

編集処理のサンプルコード振り返り


def edit_person(request, person_id):
    person = get_object_or_404(Person, id=person_id)

    if request.method == 'POST':
        form = PersonForm(request.POST, instance=person)
        if form.is_valid():
            form.save()
            return redirect('person_detail', person_id=person.id)
    else:
        form = PersonForm(instance=person)

    return render(request, 'edit_person.html', {'form': form})

このコードでは、まず編集対象となるデータを取得し、そのデータを instance としてフォームに渡しています。POST時には送信内容をチェックし、問題がなければ保存する、という非常に分かりやすい構造になっています。初心者の方は、この形をそのまま覚えてしまっても問題ありません。

先生と生徒の振り返り会話

生徒

「ModelFormを使うと、編集画面ってこんなに簡単に作れるんですね。最初は難しそうだと思っていました。」

先生

「そう感じる人は多いですよ。でも、ModelFormは初心者のために用意されている仕組みとも言えます。モデルを理解できていれば、フォームも自然に作れます。」

生徒

「instanceを指定するのが大事なんですね。これを書き忘れると新しくデータが増えてしまうのが、やっと分かりました。」

先生

「その理解はとても大切です。編集なのか、新規作成なのかは、instanceがあるかどうかで決まります。」

生徒

「GETは表示、POSTは保存、という流れも整理できました。今まで何となく書いていた部分が、ちゃんと意味を持って見えます。」

先生

「その調子です。意味を理解しながら書けるようになると、Djangoは一気に楽しくなりますよ。次は一覧画面や削除処理にも挑戦してみましょう。」

カテゴリの一覧へ
新着記事
New1
Django
Django ModelFormで編集フォームを作る方法をやさしく解説|既存データの更新処理入門
New2
Flask
Flaskの国際化対応でよくある課題と対処法まとめ!Python初心者向け解決ガイド
New3
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
New4
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでNoSQL操作!エラーハンドリングを初心者向けに徹底解説
No.2
Java&Spring記事人気No2
Flask
FlaskでJSONレスポンスを多言語化!API設計の基本を初心者向けに解説
No.3
Java&Spring記事人気No3
Flask
Flaskで多言語対応のログメッセージを出力する方法!Python初心者向けガイド
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Python
PythonのSQLAlchemy使い方入門!初心者でもわかるインストールと初期設定
No.6
Java&Spring記事人気No6
Python
PythonのSQLAlchemyでデータベース操作!モデルクラスでテーブル定義する方法を徹底解説
No.7
Java&Spring記事人気No7
Python
PythonでCassandraに接続する方法を完全ガイド!cassandra-driverの使い方
No.8
Java&Spring記事人気No8
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説