如何只允许条目的作者在UpdateView逻辑中进行编辑

时间:2019-03-31 09:29:36

标签: django django-views

这是问题所在: 我有覆盖了get_object方法的更新视图:

class MyUpdateView(SuccessMessageMixin, LoginRequiredMixin, UpdateView):

...some code here...

    def get_object(self, queryset=None):
        obj = UpdateView.get_object(self, queryset=None)
        if not obj.author == self.request.user:
            redirect(reverse_lazy("app:url")) # or reverse instead  , no difference
        return obj

p.s。通过外键将object.author绑定到用户模型(在本例中为self.request.user)

在此视图中,我只允许编辑创建此精确条目的用户的条目。我知道如何通过get_queryset或UserPassesTestMixin来做到这一点,但是两种方法都会引发错误。相反,我需要将不是作者的用户重定向回他来自的页面或特定URL(参数)。

在这种情况下(代码在下面),它工作正常,出现404,因此逻辑有效。我在网站上尝试过:作者可以编辑条目,非作者会产生404。


# in this case it forks fine,  404 appears :

 def get_object(self, queryset=None):
        obj = UpdateView.get_object(self, queryset=None)
        if not obj.author == self.request.user:
            raise Http404
        return obj

但是在第一个示例中,由于某种原因,重定向不起作用。

我已经尝试过-get_querryset或UserPassesTestMixin,但这不是我所需要的

autor = request.user-允许编辑条目

author!= request.user-转到上一页,找到某个URL +消息

在这种情况下,如果有人知道如何使用重定向-请回答。祝你有个美好的一天

---解决方案---


    def get(self, request, **kwargs):
        if self.get_object().author == self.request.user:
            return UpdateView.get(self, request, **kwargs)
        else:
            messages.add_message(request, messages.WARNING, "You can only change your own entries")
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

1 个答案:

答案 0 :(得分:3)

You need to go backthen aware the user with a message using the django message framework的正确方法是

from django.http import HttpResponseRedirect

def someview(request):
   ...
   return HttpResponseRedirect(request.META.get('HTTP_REFERER'))