2017-02-03 16 views
1

Я использую класс пользователя по умолчанию для системы проверки подлинности django.класс UserAdmin (admin.ModelAdmin) переопределить функцию удаления для multi-delete

Я переопределил функцию delete_model в классе UserAdmin, как показано ниже, чтобы выполнить некоторые вещи при удалении моего пользователя. Он отлично работает, когда я перехожу к пользователю на странице администратора, а затем нажмите кнопку удаления. Моя проблема в том, что когда я делюте одного или нескольких пользователей на странице UserAdmin, похоже, что это не вызванная функция delete_model. Что мне делать, чтобы исправить это?

from django.contrib import admin 

#create a custom model admin which allow to search on the email field 
class UserAdmin(admin.ModelAdmin): 

    #override the delete method to unset the send email to the deleted_user 
    def delete_model(UserAdmin, request, obj): 

     #### do something #### 

     obj.delete() 

#unregister the basic User, and register the new User ModelAdmin 
admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 
+2

Вы должны использовать 'UserAdmin' из Джанго, а не только нормальный' ModelAdmin 'в качестве базового класса, иначе вы потеряете все другие функции UserAdmin. – trixn

ответ

0

() Это будет решение 1 описывается iklinac:

from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.admin.actions import delete_selected as django_delete_selected 


class UserAdmin(DjangoUserAdmin): 
    actions = ['delete_selected'] 

    def delete_model(modeladmin, request, obj): 
     # do something with the user instance 

     obj.delete() 

    def delete_selected(modeladmin, request, queryset): 
     # do something with the users in the queryset 

     return django_delete_selected(modeladmin, request, queryset) 
    delete_selected.short_description = django_delete_selected.short_description 

admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 
0

Удаление выбранного осуществляется функцией Джанго называется delete_selected

from django.contrib.admin.actions import delete_selected 

Есть 2 подхода к разрешению этого

  1. Отключить оригинальный delete_selected и создать свой собственный, что вы будете добавлять до административных действий

  2. Override UserModels QuerySet/менеджер удалить метод

+1

Чтобы быть точным, вариант 2 будет переопределять метод 'select()' queryset/manager UserModels'. Но это предполагает использование пользовательской модели пользователя. – trixn

+0

Спасибо, заметив :) обновлено – iklinac