0

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

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

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

Django:在显示之前删除消息

删除/清除 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)

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

我在用着;

  • 姜戈 2.2
  • 蟒蛇 3.7
4

1 回答 1

2

这里的解决方案是迭代加载的消息&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 条消息,“详细信息已更新”。

这类似于这里提出的解决方案;https://stackoverflow.com/a/30517135/9733868

于 2019-12-02T17:01:06.893 回答