【问题标题】:How can I add if statement to a deleteview? CBV django如何将 if 语句添加到 deleteview? CBV django
【发布时间】:2026-01-01 22:25:02
【问题描述】:

嘿,我想添加 if 语句并根据它决定是否删除对象。 我在网上找不到。 一般来说,我如何将 if 语句添加到任何 CBV,例如 Update ..

这是我的 DeleteView 函数:

class PostDeleteView(LoginRequiredMixin, DeleteView):
    model = Post
    success_url = reverse_lazy('TheApp:post_list')

编辑!对我有用的解决方案:(感谢 AKX)

def delete(self, request, *args, **kwargs):
        if (Post.author == request.user.username):
            return super().delete(request, *args, **kwargs)
        else:
            return HttpResponse('You are not the owner of this Post! You can not delete it!')

【问题讨论】:

    标签: django django-class-based-views


    【解决方案1】:

    好吧,如您所知,CBV 的方法映射到 HTTP 方法,因此只需覆盖 delete() 并添加您的条件:

    class SomeView(..., DeleteView, ...):
        def delete(self, request, *args, **kwargs):
            if request.GET.get('really') != 'true':
                return HttpResponse('I knew you were just kidding!')
            return super().delete(request, *args, **kwargs)
    

    【讨论】:

    • 所以我可以只使用 List、Update 等覆盖任何 cbv 吗?
    • "list" 和 "update" 不是用于 CBV 的东西——它们是用于 Django Rest Framework 视图的。
    • 我的意思是我可以通过 def update(....) 覆盖 UpdateView,就像你对 delete 所做的那样
    • UpdateView 使用 def post()... 遵循从 github.com/django/django/blob/… 向上的类层次结构
    • 谢谢兄弟.. 感激不尽