首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >覆盖父类Django管理中定义的操作

覆盖父类Django管理中定义的操作
EN

Stack Overflow用户
提问于 2020-04-17 11:21:27
回答 1查看 407关注 0票数 0

我正在从Django 1.11升级Django项目。我已经成功地将该项目升级到Django 2.1。当我升级到Django 2.2时,我得到了以下错误消息:"(admin.E130) name属性在类AdimClass(非实名)中定义的操作必须是唯一的“

管理员类是

代码语言:javascript
运行
复制
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) name AdimClass类中定义的操作属性(非实名)必须是唯一的

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

目标:将操作保存在父类AAdmin中,并在子类BAdmin上重写它。

注意:代码运行良好,一直到Django 2.1。

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 14:46:13

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

代码语言:javascript
运行
复制
class BAdmin(AAdmin):

    def get_actions(self, request):
        actions = AAdmin.actions
      
        if 'custom_action' in actions:
            del actions['custom_action']
    
        return actions + [custom_action]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61270409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档