È possibile sostituire il metodo utilizzato per chiamare la pagina di conferma dell'eliminazione dell'amministratore di Django?
-
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?
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