0

Django プロジェクトを Django 1.11 からアップグレードしています。プロジェクトを Django 2.1 に正常にアップグレードしました。Django 2.2 にアップグレードしたときに、「(admin.E130)クラス AimClass で定義されたアクションの名前属性 (実名ではない) は一意でなければなりません」というエラー メッセージが表示されました。

管理者クラスは

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)クラス AimClass で定義されたアクションの名前属性 (実名ではない) は一意でなければなりません

AAdmin からcustom_actionを削除すると、エラーは解決されますが、 AAdminを継承する他のクラスでアクションを使用できなくなります。

目標:アクションを親クラスAAdminに保持し、子クラスBAdminでオーバーライドします。

注:コードは Django 2.1 まで正常に動作しています。

4

1 に答える 1

1

問題は、同じアクション名「custom_action」を BAdmin に 2 回追加しようとしているということです。最初のアクションは 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]
于 2020-08-17T14:46:13.290 に答える