这是问题所在: 我有覆盖了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)
在这种情况下(代码在下面),它工作正常,出现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'))
答案 0 :(得分:3)
You need to go back和then 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'))