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 もよく使うビューの中の一つだと思います。