【发布时间】:2019-08-21 16:47:11
【问题描述】:
问题出在:我有一个更新视图,其中覆盖了 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
附言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_queryset 或 UserPassesTestMixin,但这不是我需要的
autor = request.user - 允许编辑条目
author != request.user - 转到上一页 ot 到某个 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'))
【问题讨论】:
标签: django django-views