我在做一个练习,里面有一份小报纸,我只允许文章创建者删除它,否则,重定向到“主页”页面。但是,那没用,我只能提高Http404。在
在视图.py公司名称:
class ArticleDeleteView(LoginRequiredMixin, DeleteView):
model = Article
template_name = 'article_delete.html'
success_url = reverse_lazy('article_list')
def get_object(self, queryset=None):
""" Hook to ensure object is owned by request.user """
obj = super(ArticleDeleteView, self).get_object()
if not obj.author == self.request.user:
print(redirect('home'))
raise Http404
return obj
我试着:
^{pr2}$不是“raise Http404”,而是Django抛出以下错误:
'HttpResponseRedirect' object has no attribute 'delete'
解决这种行为的方法是什么?为什么会发生这种情况?在
谢谢你的帮助!!在
编辑:(跟随@SK。Fazlee Rabby评论,那篇文章让我走上了正确的道路)
这真是太好了!谢谢,SK。法兹利·拉比
def dispatch(self, request, *args, **kwargs):
""" Making sure that only authors can delete Articles """
obj = self.get_object()
if obj.author != self.request.user:
messages.error(request, 'Document not deleted.')
return redirect('article_list')
messages.success(request, 'Document deleted.')
return super(ArticleDeleteView, self).dispatch(request, *args, **kwargs)
首先 如果你需要改变删除对象的行为,你应该覆盖delete方法而不是get_object,get_object只是为了得到这个对象(如果你提出404 django处理这个错误并返回http404)
你应该这样写代码:
相关问题 更多 >
编程相关推荐