入門クラス

DeleteViewとは

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 などとなりますが、DeleteViewform_validform_invalid はありませんのでカスタマイズできません。

正確には実際にレコードを削除するメソッドが delete ですので、処理を差し込みたいときはスーパーメソッドを呼んでから独自の処理を差し込みます。

クラスベースビューの継承関係が違うため、このような動作になっています。

まとめ

DeleteView もよく使うビューの中の一つだと思います。

 

-入門クラス
-,