Можно ли переопределить метод, используемый для вызова страницы подтверждения удаления администратора Django?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

На страницах администратора Django я хотел бы выполнить действие, когда администратор нажимает кнопку «Удалить» для объекта. Другими словами, я хотел бы выполнить некоторый код до того, как появится сообщение " Вы уверены? & Quot; удалить страницу подтверждения.

Я понимаю, что могу переопределить страницу шаблона для этого объекта, но я надеялся на что-то более простое (то есть переопределить метод в модели или форме).

Есть мысли?

Это было полезно?

Решение

Вы можете переопределить метод 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.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('..')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top