É possível substituir o método usado para chamar a página de confirmação de exclusão de administração do Django?

StackOverflow https://stackoverflow.com/questions/1015072

  •  06-07-2019
  •  | 
  •  

Pergunta

páginas de administração do No Django, eu gostaria de executar uma ação quando o administrador clica no botão Apagar para um objeto. Em outras palavras, eu gostaria de executar algum código antes de chegar na "Tem certeza?" página de confirmação de exclusão.

Eu percebo que eu poderia substituir o modelo de página para este objeto, mas eu estava esperando por algo mais fácil (ou seja, substituir um método no modelo ou a forma).

Qualquer pensamento?

Foi útil?

Solução

Você pode substituir o método ModelAdmin.delete_view(), como:

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)

Outras dicas

Podemos usar django.shortcuts.redirect ao apagamento de interrupção, como este:

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('..')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top