【问题标题】:Adding a success message to a generic redirect view in Django将成功消息添加到 Django 中的通用重定向视图
【发布时间】:2020-08-09 17:49:37
【问题描述】:

我目前有一个项目,人们可以在其中创建帖子。我想显示一条消息,说明帖子已成功投票,但 SuccessMessageMixin 不起作用。我尝试了其他方法,这些方法包含在我的代码中,我将在下面发布。 SuccessMessageMixin 适用于其他视图。我不确定为什么它不适用于此视图。

重定向代码不起作用的视图

class PostUpvoteRedirect(SuccessMessageMixin, RedirectView):
    model = Post
    success_message = "Post was upvoted successfully"
    def get_redirect_url(self, *args, **kwargs):
        obj = get_object_or_404(
            Post,
            publish__year=self.kwargs['year'],
            publish__month=self.kwargs['month'],
            publish__day=self.kwargs['day'],
            slug=self.kwargs['post'],
        )
        url_ = obj.get_absolute_url()
        user = self.request.user
        if (user != None):
            if user in obj.Upvote.all():
                obj.Upvote.remove(user)
            else:
                obj.Upvote.add(user)
                if user in obj.Downvote.all():
                    obj.Downvote.remove(user)
            success_message = "Post was upvoted successfully"
        return url_

有效的代码

class PostCreateView(SuccessMessageMixin, LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title','body']
    success_message = "Post was created successfully"

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

【问题讨论】:

  • 问题解决了吗?

标签: python django django-views


【解决方案1】:

这里的关键是要意识到这一点

SuccessMessageMixin 挂钩到 Form_valid,它在 RedirectView 上不存在,以将其消息推送给用户。

这正是它在其他方法中工作的原因,因为这些类支持form_valid() 功能。

您可以在这里看到这个写得很好的答案,了解如何使用RedirectView - Success_url in django RedirectView 启用它

【讨论】:

  • 问题是 UpvoteRedirect 视图在技术上不是一个表单,所以没有要验证的表单
猜你喜欢
  • 2017-02-14
  • 2020-10-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多