Есть ли способ задать параметры действия Mixin Django Admin внутри модели?

Итак, у меня есть работающий Mixin для действия, который в настоящее время работает со всеми полями набора запросов. Вместо этого я хотел бы иметь возможность указать, какие поля будут использоваться действием через код для страницы Admin.

Для контекста, вот краткая часть моего Mixin:

class MyMixin:

    def my_action(self, request, queryset):
        model_to_update = apps.get_model(
            app_label=<my_app>,
            model_name=queryset.first().__class__.__name__)
        ...
        for field in model_to_update._meta.get_fields():
             # do cool stuff with all fields
        ...
        return render(...)

Вот как миксин включен в настоящее время:

...
@admin.register(<Model>)
class ModelAdmin(MyMixin):
    ...
    actions = ["my_action"]
    ...

... и что я хотел бы сделать, это что-то вроде:

...
@admin.register(<Model>)
class ModelAdmin(MyMixin):
    ...
    actions = [my_action(fields=['foo', 'bar',]]
    ...

..., где foo и bar являются подмножествами полей ModelAdmin.

Заранее благодарю за любые идеи! Прошу прощения, если этот вопрос уже задавался в другом месте, и я просто сформулировал его по-другому.

Вы можете написать функцию фабрики действий, которая возвращает действие. Это не требует использования миксина.

def action_factory(fields, description='some action'):
    def my_action(self, request, queryset):

        for field in fields:
             # do cool stuff with fields and queryset
             queryset.update(**{field:None})

    my_action.short_description = description
    return my_action

@admin.register(FooBar)
class FooBarAdmin(admin.ModelAdmin):
    actions = [action_factory(
        fields=['foo', 'bar'], 
        description='clear foo and bar'
    )]
Вернуться на верх