【问题标题】:class UserAdmin(admin.ModelAdmin) override delete function for multi-deleteclass UserAdmin(admin.ModelAdmin) 覆盖删除功能,实现多重删除
【发布时间】:2017-02-03 15:42:54
【问题描述】:

我正在使用 django 身份验证系统的默认 User 类。

我已经重写了 UserAdmin 类上的 delete_model 函数,如下所示,以便在删除我的用户时执行一些操作。当我转到管理页面上的用户时,它工作正常,然后单击删除按钮。我的问题是当我在 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)

【问题讨论】:

  • 您应该使用 django 中的 UserAdmin 而不是普通的 ModelAdmin 作为基类,否则您将失去所有其他 UserAdmin 特定功能。

标签: python django admin


【解决方案1】:

这将是 iklinac 描述的解决方案 1:

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)

【讨论】:

    【解决方案2】:

    删除选择是由名为 delete_selected

    的 Django 函数完成的
    from django.contrib.admin.actions import delete_selected
    

    有两种方法可以解决这个问题

    1. 禁用原始 delete_selected 并创建您自己的,您将添加到管理操作中

    2. 覆盖 UserModels queryset/manager delete() 方法

    【讨论】:

    • 确切地说,选项 2 将覆盖 UserModels queryset/manager delete() 方法。但这将涉及使用自定义用户模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2012-12-23
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多