覆盖父类Django admin中定义的操作



我正在从Django 1.11升级一个Django项目。我已经成功地将项目升级到Django 2.1。当我升级到Django 2.2时,我收到了以下错误消息"(admin.E130(name类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(名称类AdimClass中定义的操作属性(非实名(必须是唯一的

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

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

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

问题是您试图添加相同的操作名称"custom_action;添加两次,第一次由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]

最新更新