Django中DeleteView结合SuccessMessageMixin如何传递数据到成功消息?
解决DeleteView中SuccessMessageMixin传递删除对象信息的问题
因为DeleteView执行删除操作后,目标对象已从数据库中移除,默认的SuccessMessageMixin无法直接获取对象字段值,不过可以通过以下两种方法实现需求:
方法一:重写get_success_message方法
利用DeleteView执行删除前会先通过get_object()获取目标对象并存储在self.object中的特性,直接在方法里格式化消息:
from django.views.generic.edit import DeleteView from django.contrib.messages.views import SuccessMessageMixin from .models import Book class BookDeleteView(SuccessMessageMixin, DeleteView): model = Book success_url = '/books/' success_message = "%(title)s has been deleted" def get_success_message(self, cleaned_data): return self.success_message % {'title': self.object.title}
方法二:重写delete方法自定义消息
如果需要更灵活的消息控制,可以先保存待删除对象的信息,再执行删除并手动添加消息:
from django.views.generic.edit import DeleteView from django.contrib import messages from .models import Book class BookDeleteView(DeleteView): model = Book success_url = '/books/' def delete(self, request, *args, **kwargs): # 提前获取待删除对象 deleted_book = self.get_object() # 执行父类的删除逻辑 response = super().delete(request, *args, **kwargs) # 添加带具体信息的成功消息 messages.success(request, f"{deleted_book.title} has been deleted") return response
内容的提问来源于stack exchange,提问作者Sean Rasmussen
相关产品推荐
相关产品推荐

