Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Django入門】UpdateViewの使い方を徹底解説!モデルデータを更新する方法

UpdateViewは、Djangoに標準で組み込まれている汎用クラスビューの一つで、フロントエンドからモデルのデータを更新するために使用します。管理画面のように既存レコードを編集できるフォームを自動的に生成してくれるため、少ないコード量で更新機能を実装できるのが大きな魅力です。この記事では、実際のサンプルを使いながら、DjangoでUpdateViewを使用する手順をわかりやすく解説します。

1. プロジェクトとアプリの作成

まずはじめに、Djangoプロジェクトとアプリを作成しましょう。ここでは、プロジェクト名を「tutorial11」、アプリ名を「modelFormsDemo」として進めていきます。

続いて、基本的な初期設定を行います。

settings.pyへのアプリ登録

settings.pyのINSTALLED_APPSに、作成したアプリを追加します。

INSTALLED_APPS += ['modelFormsDemo']

プロジェクト側のurls.pyの設定

プロジェクトのurls.pyで、アプリ側のURL設定を読み込むようにします。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('modelFormsDemo.urls'))
]

アプリ側のurls.pyの設定

アプリのurls.pyには、以下のようにルーティングを定義します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name="home"),
    path('student/edit/<int:pk>/', views.StudentUpdateView.as_view(), name="update"),
    path('success/', views.success, name='success')
]

ここでは3つのURLを作成しました。1つ目はフロントエンド(入力フォーム)を表示するためのURL、2つ目はUpdateViewでデータを更新するためのURL、3つ目は更新完了後にリダイレクトされる成功ページ用のURLです。

2. モデルの定義(models.py)

models.pyに以下のコードを追加します。

from django.db import models

# Create your models here
class Student(models.Model):
    name = models.CharField(max_length=100)
    standard = models.CharField(max_length=100)
    section = models.CharField(max_length=100)

ここでは、名前・学年・クラスという3つのフィールドを持つ、ごくシンプルなStudentモデルを作成しました。

3. ビューの作成(views.py)

views.pyには以下のコードを記述します。

from django.shortcuts import render
from .forms import StudentForm
from django.views.generic.edit import UpdateView
from .models import Student
from django.urls import reverse_lazy

# Create your views here.
def home(request):
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
    stuForm = StudentForm()
    return render(request, 'home.html', {"stu_form": stuForm})

class StudentUpdateView(UpdateView):
    model = Student
    fields = "__all__"
    template_name = 'update_view.html'
    success_url = '/success/'

def success(request):
    return render(request, 'success.html')

特に複雑な処理は行っていません。UpdateViewに対象となるモデル、編集するフィールド、レンダリングするテンプレートを指定しているだけです。また、更新完了後に表示するページを返すsuccess関数もあわせて定義しています。

4. フォームの作成(forms.py)

アプリディレクトリ直下にforms.pyを作成し、以下のコードを追加します。

from django import forms
from .models import Student

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['name', 'standard', 'section']

ここでは、画面に表示するためのフォームをModelFormとしてシンプルに定義しています。

5. テンプレートの作成

次にtemplatesフォルダを作成し、その中にhome.htmlupdate_view.htmlsuccess.htmlの3つのファイルを配置します。

home.html / update_view.html

home.htmlupdate_view.htmlには、以下の共通コードを記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>TUT</title>
    </head>
    <body>
        {% for fm in stu_form %}
        <form method="post">
            {% csrf_token %}
            {{ fm.errors }}<br>
            {{ fm.label }}:{{ fm }}<br>
        {% endfor %}
        <button type="submit">Submit</button>
        </form>
    </body>
</html>

なお、UpdateViewではデフォルトでformというコンテキスト変数がテンプレートに渡されます。update_view.html側では、{{ form }}を使って直接フォームを描画することも可能です。

success.html

success.htmlには以下を記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>TUT</title>
    </head>
    <body>
        <h2>Success</h2>
    </body>
</html>

これですべての準備が整いました。それでは、実際に動作を確認してみましょう。

6. 動作確認(出力結果)

home.htmlの表示結果:

【Django入門】UpdateViewの使い方を徹底解説!モデルデータを更新する方法

続いて、ブラウザで https://127.0.0.1:8000/student/edit/(学生オブジェクトのID)/ にアクセスすると、update_view.htmlが表示され、該当する学生データを編集できるようになります。

update_view.htmlの表示結果:

【Django入門】UpdateViewの使い方を徹底解説!モデルデータを更新する方法

このように、UpdateViewを使えばURLさえ正しく設定すれば、モデルの更新ページをほぼ自動で構築できます。CRUD処理の中でも更新機能は実装が複雑になりがちですが、Djangoの汎用ビューを活用すれば、最小限のコードで効率的に開発を進めることができます。

  1. DjangoでMoneyフィールド(金額フィールド)を追加する方法を徹底解説

    Webサイトを開発していると、給与や料金、収入といった金額に関するデータを扱う場面がよくあります。Djangoには標準で整数型のフィールドが用意されていますが、金額データの処理には必ずしも適していません。そこで便利なのが、サードパーティ製ライブラリ「django-money」です。このライブラリを使えば、通貨情報付きのMoneyフィールドをモデルに簡単に追加できます。 この記事では、django-moneyを使ってDjangoモデルに金額フィールドを実装する手順を、サンプルコードとともにわかりやすく解説します。 事前準備:プロジェクトとアプリの作成 まずはDjangoプロジェクトとアプリを作

  2. DjangoプロジェクトにDebug Toolbar(デバッグツールバー)を導入する方法

    Django Debug Toolbarは、データベースクエリの確認やWebサイトの読み込み速度の計測など、さまざまなデバッグ作業に活用できる強力なツールです。開発者の間で非常に人気が高く、多くのプロジェクトで採用されています。この記事では、その具体的な導入手順をステップごとに解説します。 実装例 まず、「myapp」という名前のアプリを作成しておきましょう。 1. django-debug-toolbarのインストール 最初に、django-debug-toolbarをインストールします。 pip install django-debug-toolbar 2. INSTALLED_APPSへ