Django中ModelForm提交出现双成功消息 如何禁用默认提示
问题核心原因
出现重复提示是因为你手动添加的自定义消息,和Django其他内置逻辑/组件自动生成的成功消息同时生效导致的,根据你使用的视图类型可对应以下解决方案:
解决方案
场景1:使用Django通用类视图(CreateView/UpdateView等)
绝大多数重复提示都属于这个场景:你在类视图的继承列表里引入了SuccessMessageMixin,该Mixin会在表单提交成功后自动生成默认成功提示,同时你又在form_valid方法里手动加了一遍自定义提示。
二选一解决即可:
- 方案1:删掉你手动写的
messages.success那行代码,直接通过Mixin的success_message属性自定义提示内容,示例如下:
from django.views.generic.edit import UpdateView from django.contrib.messages.views import SuccessMessageMixin from .models import YourModel class TemplateUpdateView(SuccessMessageMixin, UpdateView): model = YourModel form_class = YourModelForm success_url = '/your/redirect/path/' # 直接在这里自定义提示内容,支持占位符调用模型字段 success_message = "%(template_name)s 更新成功"
- 方案2:删掉类视图继承列表里的
SuccessMessageMixin,保留你手动写的自定义提示代码即可。
场景2:使用函数视图
如果是手动编写的函数处理表单提交,排查以下两个方向:
- 检查是否给模型绑定了
post_save信号,信号处理逻辑里自动发送了成功提示,找到对应绑定代码删除即可。 - 检查你自定义的ModelForm类的
save方法里是否内置了发送成功提示的逻辑,删掉对应代码即可。
快速排查技巧
可以先注释掉你手动写的那行messages.success(request,'{} is successfully updated'.format(obj.template_name))代码,提交表单后如果还有成功提示,就说明默认提示来自其他上层逻辑,对应上面的场景排查即可。
内容的提问来源于stack exchange,提问作者uday
相关产品推荐
相关产品推荐

