È possibile sostituire il metodo utilizzato per chiamare la pagina di conferma dell'eliminazione dell'amministratore di Django?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Nelle pagine di amministrazione di Django, vorrei eseguire un'azione quando l'amministratore fa clic sul pulsante Elimina per un oggetto. In altre parole, vorrei eseguire del codice prima di arrivare su " Sei sicuro? & Quot; elimina la pagina di conferma.

Mi rendo conto che potrei sovrascrivere la pagina del modello per questo oggetto, ma speravo in qualcosa di più semplice (ovvero, sovrascrivere un metodo sul modello o sul modulo).

Qualche idea?

È stato utile?

Soluzione

Puoi ignorare il metodo ModelAdmin.delete_view () , come:

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)

Altri suggerimenti

Possiamo usare django.shortcuts.redirect per interrompere la cancellazione, in questo modo:

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('..')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top