繁体   English   中英

覆盖父 class Django 管理员中定义的操作

[英]Override actions defined in parent class Django admin

我正在从 Django 1.11 升级 Django 项目。 我已成功将项目升级到 Django 2.1。 当我升级到 Django 2.2 时,我收到此错误消息“(admin.E130)在 class AdimClass(非真实姓名)中定义的操作的名称属性必须是唯一的”

管理员类是

class AAdmin(admin.ModelAdmin)

    def custom_action(self, request, queryset):
        # perform  custom action
        .....

    def custom_action_2(self, request, queryset):
        # another custom actions
        .....


    action = [custom_action, custom_action_2]


class BAdmin(AAdmin):

    def custom_action(self, request, queryset):
        # performs different actions but has the same name as AAdmin action
        .....
    actions = AAdmin.actions + [custom_action]

问题: (admin.E130) class AdimClass(not real name) 中定义的动作的名称属性必须是唯一的

如果我从 AAdmin 中删除custom_action ,则错误已解决,但该操作对于继承AAdmin的其他类不再可用。

目标:将操作保留在父 class AAdmin 中,并在子 class BAdmin上覆盖它。

注意:代码在 Django 2.1 之前运行良好。

问题是您尝试将相同的操作名称“custom_action”添加到 BAdmin 两次,第一次是由 AAdmin 继承的。 解决方案是不包括重复操作。 一个可能的解决方案:

class BAdmin(AAdmin):

    def get_actions(self, request):
        actions = AAdmin.actions
      
        if 'custom_action' in actions:
            del actions['custom_action']
    
        return actions + [custom_action]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM