如何在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
相关产品推荐
相关产品推荐

