Djangoには CreateView に並ぶ編集を担当するView、UpdateView というMixinがあります。
ですのでこの記事では、Djangoにおける UpdateView について解説します。
それはなにか
UpdateView
はモデルと連携して、データの更新を請け負います。
通常のウェブサイトでは、フォームを使用してユーザーからのデータを受け取ります。
UpdateView
は受け取ったデータを精査して、モデルに設定されたフィールドに適したデータなのを確認します。
保存するのに支障がなければ保存をモデルに依頼します。
保存が成功すると、success_url
で設定されたURLか、get_success_url
メソッドで返されたURLに移動します。
どんないいことがあるのか
CreateView
と同様です。
- モデルにを定義した段階で、すでにバリデーションの条件を記載したことになりますので、いちいちバリデーション内容を記述する必要がありません。
fields
によって受け入れるフィールドを設定できるため、IDなどを上書きしようとする攻撃に対応しています。form
を作成、設定することでフォーム自体をカスタマイズすることができます。- 新規作成の成功・失敗に応じて呼ばれるメソッドをオーバーライドして独自のフックを追加することが可能です。
使い方
モデルはこんな感じだと思ってください。
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
from django.views.generic import UpdateView
from .models import Article
class ArticleUpdateView(UpdateView):
model = Article
fields = ['title', 'content', ]
success_url = "/"
このようになります。
fields
は送られてきたデータの中で、ここに指定されたフィールドのデータを処理します。
テンプレートでは、自動で生成される変数form
を使用します。
<form method="post">
{% csrf_token %}
{{ form }}
</form>
注意点
デフォルトだとCreateView
と同じテンプレートを使うことになりますので、もし内容に変更を加えたい場合はひと手間必要になります。
まとめ
UpdateView
はよく使うビューの中の一つだと思います。
といっても難しい事はありません。