Djangoには、データを削除するView、DeleteView
というMixinがあります。
ですのでこの記事では、Djangoにおける DeleteView
について解説します。
それはなにか
DeleteView
はモデルと連携して、データの削除を請け負います。
一般的な流れとしては DeleteView は、DeleteViewが担当するページにアクセスさせて「本当に削除しても良いか」を確認します。
そして、フォームからPOSTメソッドでのアクセスがあると対象のデータを削除します。
削除が成功すると、success_url
で設定されたURLか、get_success_url
メソッドで返されたURLに移動します。
どんないいことがあるのか
データを削除できます。
delete
メソッドをオーバーライドすることで削除の動作をカスタマイズできます。
削除する代わりに削除フラグをONにして実際に削除はしない、などです。- 削除の確認画面では実際に削除するレコードのデータを表示することができます。
使い方
モデルはこんな感じだと思ってください。
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
from django.views.generic import DeleteView
from .models import Article
class ArticleDeleteView(DeleteView):
model = Article
success_url = "/"
このようになります。
テンプレートでは、自動で生成される変数object
を使用します。
テンプレート名は (モデル名)_delete_confirm.html
です。
<p>本当に {{ object.name }} を削除してもよろしいですか?</p>
<form method="post">
{% csrf_token %}
<button type="submit">削除する</button>
</form>
注意点
DeleteView
では処理成功時に処理を差し込むメソッドは delete
です。
他のクラスベースビューでは form_valid
などとなりますが、DeleteView
に form_valid
やform_invalid
はありませんのでカスタマイズできません。
正確には実際にレコードを削除するメソッドが delete
ですので、処理を差し込みたいときはスーパーメソッドを呼んでから独自の処理を差し込みます。
クラスベースビューの継承関係が違うため、このような動作になっています。
まとめ
DeleteView
もよく使うビューの中の一つだと思います。