Django 1.11.9中SuccessMessageMixin与DeleteView无法正常工作咨询
Django 1.11中DeleteView无法添加成功消息的问题解答
你的理解完全正确——在Django 1.11.9版本里,官方的DeleteView确实没有内置支持成功消息的功能。你提到的那个PR因为长期无人维护被关闭,并没有被合并到Django的核心代码中,所以官方实现里不会自动触发删除成功的提示消息。
其实这个问题的根源在于,早期Django的SuccessMessageMixin(用来添加成功消息的通用Mixin)只针对带有表单的视图(比如CreateView、UpdateView),它是通过form_valid方法触发消息的;而DeleteView的核心逻辑在delete方法里,并没有和这个Mixin兼容,所以直接用Mixin也不会生效。
如果你需要给DeleteView添加成功消息,有两个简单的解决方案:
方法一:直接重写delete方法
手动在删除逻辑执行后添加消息,示例代码如下:
from django.contrib import messages from django.views.generic.edit import DeleteView from django.urls import reverse_lazy from .models import YourModel class YourModelDeleteView(DeleteView): model = YourModel success_url = reverse_lazy('yourmodel-list') # 替换成你的列表视图URL def delete(self, request, *args, **kwargs): # 添加成功消息 messages.success(request, "该条目已成功删除") # 调用父类的delete方法完成删除操作 return super().delete(request, *args, **kwargs)
方法二:自定义可复用的Mixin
如果你的项目中有多个DeleteView都需要添加成功消息,可以写一个通用Mixin来复用逻辑:
from django.contrib import messages class DeleteSuccessMessageMixin: # 可以在视图中自定义消息内容 delete_success_message = "条目已成功删除" def delete(self, request, *args, **kwargs): messages.success(request, self.delete_success_message) return super().delete(request, *args, **kwargs) # 使用时只需要继承这个Mixin即可 class YourModelDeleteView(DeleteSuccessMessageMixin, DeleteView): model = YourModel success_url = reverse_lazy('yourmodel-list') # 自定义消息 delete_success_message = "自定义的删除成功提示"
需要注意的是,这个内置支持的功能在后续的Django版本(比如3.0及以后)才被加入到官方的DeleteView相关实现中,所以如果你升级到更高版本的Django,就可以直接使用SuccessMessageMixin配合DeleteView了。
内容的提问来源于stack exchange,提问作者Kurt Peek
相关产品推荐
相关产品推荐

