2009-06-18 2 views
6

Auf Djangos Admin-Seiten möchte ich eine Aktion ausführen, wenn der Administrator auf die Schaltfläche Löschen für ein Objekt klickt. Mit anderen Worten, ich würde gerne etwas Code ausführen, bevor ich auf "Bist du sicher?" Bestätigungsseite löschenIst es möglich, die Methode zu überschreiben, mit der Djangos Löschbestätigungsseite für Administratoren aufgerufen wurde?

Ich weiß, dass ich die Vorlagenseite für dieses Objekt überschreiben konnte, aber ich hatte auf etwas leichter gehofft (d. H. Eine Methode auf dem Modell oder dem Formular überschreiben).

Irgendwelche Gedanken?

+0

Warum sind Sie nicht ein Formular für diese zu schaffen ? –

+6

Warum sollte er? Löschen ist eine Funktion des Admins, kein Formular. –

Antwort

7

Sie ModelAdmin.delete_view() Methode außer Kraft setzen können, wie:

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) 
+4

Sie müssen super zurückgeben (MyModelAdmin, self .... – panchicore

+2

Funktioniert diese Lösung auch für das mehrfache Löschen in django admin, wenn mehrere Objekte in einem Vorgang gelöscht werden? –

2

Wir können Löschen verwenden django.shortcuts.redirect zu unterbrechen, wie folgt aus:

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('..') 
Verwandte Themen