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はよく使うビューの中の一つだと思います。
といっても難しい事はありません。