【问题标题】:Django admin: Using messages.error still results in confirmation being shownDjango 管理员:使用messages.error 仍会导致显示确认
【发布时间】:2025-12-04 15:00:01
【问题描述】:

我已经覆盖了我的 save_model() 函数以将 obj.save() 调用包装在 try/catch 中。

def save_model(self, request, obj, form, change):
    from concurrency.exceptions import RecordModifiedError
    from django.http import HttpResponse
    try: 

        obj.save()
        # some other stuff

    except RecordModifiedError:
        messages.error(request, "[!] Record modified. Please try again.")
        #self.message_user(request, "[!] Record modified. Please try again.", level="error")

捕获 RecordModifiedError 正在工作,但数据未保存。但是,成功保存时出现的确认消息仍然显示,错误也是如此。我有两个相互矛盾的信息被显示!

我想知道如何防止显示成功消息。谢谢!

编辑:也尝试了self.message_user() 功能,但它也没有阻止成功消息。

【问题讨论】:

  • 好吧??你找到解决方案了吗?我也有同样的问题

标签: django django-admin django-messages


【解决方案1】:

不是必须这样吗?

try: 

    obj.save()
    messages.error(request, "[!] Record modified.")

except RecordModifiedError:
    messages.error(request, "[!] Record NOT modified. Please try again.")

【讨论】:

  • 这并没有改变行为。现在,当我成功保存时,我会看到两条成功消息。不过还是谢谢。
【解决方案2】:

我认为这应该可行:

storage = messages.get_messages(request)
storage.used = True
messages.error(request, "[!] Record modified. Please try again.")

【讨论】:

    【解决方案3】:

    我通过覆盖message_user 函数解决了同样的问题。如果有错误,我会设置一个标志。如果设置了标志,则返回message_user,如果未设置,则使用super 函数调用基类message_user

    【讨论】:

      最近更新 更多