在呈现响应之前删除消息

Remove messages before the response is rendered

我有一个页面,其中包含 2 个表单并允许更新每个表单所附的模型。

我还集成了消息框架,这在很大程度上是完美的。但在发布到此页面后,您会收到两条成功消息,我想在它们的位置显示一条简单的消息。

我尝试了其他问题中建议的各种方法;

Django: Remove message before they are displayed

Deleting/Clearing django.contrib.messages

但是我无法清除消息队列。

def post(self, request, **kwargs):
    profile_valid = False
    user_valid = False

    post_data = request.POST or None

    profile_form = self.profile_form_class(
        post_data,
        instance=request.user.profile,
        prefix='profile'
    )
    user_form = self.user_form_class(
        post_data,
        instance=request.user,
        prefix='user'
    )

    context = self.get_context_data(
        profile_form=profile_form,
        user_form=user_form
    )

    if profile_form.is_valid():
        profile_valid = True
        self.form_save(profile_form)
    if user_form.is_valid():
        user_valid = True
        self.form_save(user_form)

    if profile_valid and user_valid:
        # First get the messages from the above save methods
        storage = messages.get_messages(request)
        for message in storage:
            # Need to iterate over the messages to achieve what we need
            pass
        # Set the messages as used
        storage.used = True

        # Add our simple message
        messages.success(self.request, self.success_message)

    return self.render_to_response(context)

我正在使用基于会话的消息存储,但这似乎对视图中的可用内容没有影响。

我正在使用;

这里的解决方案是遍历加载的消息 & del 每一个;

storage = messages.get_messages(request)
for _ in storage:
    # This is important
    # Without this loop `_loaded_messages` is empty
    pass

for _ in list(storage._loaded_messages):
    del storage._loaded_messages[0]

messages.success(self.request, "Details updated")

return self.render_to_response(context)

在呈现的页面上,我看到了 1 条消息,"Details updated"。

这与此处提出的解决方案类似;