Django での一連の管理アクションの作成を自動化しようとしています。
基本的に、プロジェクト オブジェクトのステータス フィールドを一括変更できるようにしたいと考えています。status フィールドは ForeignkeyField です。
このようなクラスを作成するとうまくいくと思いました:
class StatusAction(object):
def __init__(self,status):
self.status = status
def make_action(self, modeladmin, request, queryset):
self.queryset = queryset.update(status=self.status)
make_action.short_description = "Change status to '%s' for selected projects" % status
次に、次のようなアクションを宣言します。
actions = [StatusAction(s.id).make_action for s in Status.objects.all()]
2 つの問題が発生しています。
- 管理インターフェイスで終了するアクションは 1 つだけです (最後に宣言されたもの)。
- make_action.short_description 属性にはクラス スコープがあるため、インスタンスごとに固有にすることはできません。make_action に self.make_action.short_description を入れても機能しません。
また、クロージャー(関数内の関数)でこれを実行しようとしました。それは機能の問題の属性を解決しますが、それでも管理者には 1 つのアクションしかありません。