【问题标题】:Is it possible to override the method used to call Django's admin delete confirmation page?是否可以覆盖用于调用 Django 的管理员删除确认页面的方法?
【发布时间】:2009-06-18 20:40:14
【问题描述】:

在 Django 的管理页面上,我想在管理员单击对象的删除按钮时执行一个操作。换句话说,我想在到达“你确定吗?”之前执行一些代码。删除确认页面。

我意识到我可以覆盖此对象的模板页面,但我希望有更简单的方法(即覆盖模型或表单上的方法)。

有什么想法吗?

【问题讨论】:

  • 你为什么不为此创建一个表单?
  • 他为什么要这么做?删除是管理员的功能,而不是表单。

标签: python django django-admin


【解决方案1】:

您可以覆盖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)

【讨论】:

  • 当在一个操作中删除多个对象时,此解决方案是否也适用于 django admin 中的多重删除?
【解决方案2】:

我们可以使用 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('..')

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2013-06-30
    • 2021-09-25
    • 1970-01-01
    • 2010-09-11
    • 2017-10-03
    • 2011-08-20
    • 2014-12-17
    • 2016-09-04
    相关资源
    最近更新 更多