代码之家  ›  专栏  ›  技术社区  ›  Ivo Van de Grift

带条件的通用删除视图

  •  0
  • Ivo Van de Grift  · 技术社区  · 9 年前

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

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

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

    @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() 但这些东西不起作用。

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

    1 回复  |  直到 9 年前
        1
  •  3
  •   Buddy Lindsey    9 年前

    要使用DeleteView执行此操作,只需在继承的视图上重写delete方法即可。这是一个基于你所说的例子。这只是一个如何实现的例子。您可能需要根据您的具体情况进行调整,特别是can_delete上的其他情况

    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")
    
    推荐文章