Есть ли способ задать параметры действия 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'
)]