You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的DeleteView中实现删除模型后发送邮件?

解决DeleteView删除后发送邮件的问题

DeleteView不需要额外自定义表单,它自带默认的确认删除表单,而且确实有类似form_valid()的方法可以用来实现删除后发送邮件,下面给你几种简单的实现方式:

方法1:重写delete()方法

这个方法直接处理删除请求,逻辑清晰,先拿到要删除的对象信息,再执行删除,最后发邮件:

from django.views.generic import DeleteView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from .models import Group

class DeleteGroup(DeleteView):
    model = Group
    template_name = 'delete_group.html'
    success_url = reverse_lazy('home')

    def delete(self, request, *args, **kwargs):
        # 获取要删除的组对象
        self.object = self.get_object()
        group_info = f"{self.object.name}(ID:{self.object.pk})"  # 根据你的Group模型字段调整
        # 执行删除操作
        response = super().delete(request, *args, **kwargs)
        # 发送邮件
        send_mail(
            subject=f"组 {group_info} 已删除",
            message=f"系统通知:组 {group_info} 已成功删除",
            from_email="your_system@example.com",
            recipient_list=["admin@example.com"],
            fail_silently=False,
        )
        return response

方法2:重写form_valid()方法

DeleteView继承了FormMixin,所以本身就有form_valid()方法,这个方法在确认删除的表单验证通过后执行,和你之前用CreateView/UpdateView的方式更统一:

def form_valid(self, form):
    # 提前保存要删除的组信息
    group_info = f"{self.object.name}(ID:{self.object.pk})"
    # 调用父类方法完成删除
    response = super().form_valid(form)
    # 发送邮件
    send_mail(
        subject=f"组 {group_info} 已删除",
        message=f"系统通知:组 {group_info} 已成功删除",
        from_email="your_system@example.com",
        recipient_list=["admin@example.com"],
        fail_silently=False,
    )
    return response

补充说明

  • DeleteView确实不需要你自己定义表单,系统默认会生成一个只有“确认删除”按钮的表单,用来防止误删。
  • 上面两种方法选一种就行,重写delete()更贴合删除操作的逻辑,重写form_valid()则和你之前的代码风格更一致。

内容的提问来源于stack exchange,提问作者Yehuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:48:23