【问题标题】:Generic deleteview with condition带有条件的通用删除视图
【发布时间】:2015-11-10 10:56:16
【问题描述】:

我一直在尝试创建一个 Django 通用删除视图,以删除模型的实例。

但是,我必须检查是否允许删除此项目。这是使用模型中定义的方法完成的。

到目前为止,我已经创建了这个:

@login_required
def delete_employee(request, pk):

    employee = None
    try:
        employee = Employee.objects.get(pk=pk)
    except:
        pass

    if employee and not employee.empty():
        return render(request, "error.html", None)
    else:
        # Load the generic view here.

这是一个不错的方法吗?我怎样才能在那里加载通用视图? 我尝试过EmployeeDelete.as_view() 之类的方法,但这些方法不起作用。

或者有没有办法在通用视图本身中检查这一点? 我也试过了,但我无法加载错误页面,只是抛出错误。

【问题讨论】:

    标签: python django django-views django-generic-views


    【解决方案1】:

    要使用 DeleteView 执行此操作,您只需覆盖继承视图上的删除方法即可。这是一个基于你所说的例子。这只是您如何完成它的一个示例。您可能需要根据您的具体情况对其进行调整,特别是 can_delete 上的 else

    class EmployeeDeleteView(DeleteView):
        success_url = reverse_lazy('index')
    
        def delete(self, request, *args, **kwargs):
            self.object = self.get_object()
            can_delete = self.object.can_delete()
    
            if can_delete:
                return super(EmployeeDeleteView, self).delete(
                    request, *args, **kwargs)
            else:
                raise Http404("Object you are looking for doesn't exist")
    

    【讨论】:

    • 这对我有用。我将错误换成另一个视图,更适合我的特殊情况。小附加问题,是否可以在确认之前抛出这个错误?
    • 你应该可以用这个覆盖 get 方法。实际上尝试使用 get 更改删除,我敢打赌它会起作用。
    • 我一回到家就试试。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2010-11-28
    • 2021-07-09
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多