是否可以覆盖调用Django管理后台删除确认页面的方法?

6 投票
2 回答
4590 浏览
提问于 2025-04-15 12:21

在Django的管理页面上,我想在管理员点击某个对象的删除按钮时执行一些操作。换句话说,我希望在进入“您确定要删除吗?”的确认页面之前,先运行一些代码。

我知道我可以覆盖这个对象的模板页面,但我希望能有更简单的方法(比如,覆盖模型或表单中的某个方法)。

有什么想法吗?

2 个回答

3

我们可以使用django.shortcuts.redirect来中断删除操作,方法如下:

def check_del(self, object_id):
    produkt = Produkt.objects.get(id = object_id)
    if produkt.typsklepu_set.all():
        return False
    else:
        return True

def delete_view(self, request, object_id, extra_context=None):
    # if request.POST is set, the user already confirmed deletion
    if not request.POST and self.check_del(object_id):
        return super(ProduktAdmin, self).delete_view(request, object_id, extra_context)
    elif request.POST:
        return super(ProduktAdmin, self).delete_view(request, object_id, extra_context)
    else:
        msg = u'Can not delete this object.'
        messages.error(request, msg)
        return redirect('..')
7

你可以重写 ModelAdmin.delete_view() 这个方法,像这样:

class MyModelAdmin(ModelAdmin):
    def delete_view(self, request, object_id, extra_context=None):
        # if request.POST is set, the user already confirmed deletion
        if not request.POST:
            perform_my_action()
        super(MyModelAdmin, self).delete_view(request, object_id, extra_context)

撰写回答