【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.html、update_view.html、success.htmlの3つのファイルを配置します。
home.html / update_view.html
home.htmlとupdate_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の表示結果:

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

このように、UpdateViewを使えばURLさえ正しく設定すれば、モデルの更新ページをほぼ自動で構築できます。CRUD処理の中でも更新機能は実装が複雑になりがちですが、Djangoの汎用ビューを活用すれば、最小限のコードで効率的に開発を進めることができます。
-
DjangoでMoneyフィールド(金額フィールド)を追加する方法を徹底解説
Webサイトを開発していると、給与や料金、収入といった金額に関するデータを扱う場面がよくあります。Djangoには標準で整数型のフィールドが用意されていますが、金額データの処理には必ずしも適していません。そこで便利なのが、サードパーティ製ライブラリ「django-money」です。このライブラリを使えば、通貨情報付きのMoneyフィールドをモデルに簡単に追加できます。 この記事では、django-moneyを使ってDjangoモデルに金額フィールドを実装する手順を、サンプルコードとともにわかりやすく解説します。 事前準備:プロジェクトとアプリの作成 まずはDjangoプロジェクトとアプリを作
-
DjangoプロジェクトにDebug Toolbar(デバッグツールバー)を導入する方法
Django Debug Toolbarは、データベースクエリの確認やWebサイトの読み込み速度の計測など、さまざまなデバッグ作業に活用できる強力なツールです。開発者の間で非常に人気が高く、多くのプロジェクトで採用されています。この記事では、その具体的な導入手順をステップごとに解説します。 実装例 まず、「myapp」という名前のアプリを作成しておきましょう。 1. django-debug-toolbarのインストール 最初に、django-debug-toolbarをインストールします。 pip install django-debug-toolbar 2. INSTALLED_APPSへ