#37176: Action should be importable from django.contrib.admin.
-------------------------------------+-------------------------------------
Reporter: Mariusz Felisiak | Owner: Mariusz
| Felisiak
Type: Bug | Status: assigned
Component: contrib.admin | Version: 6.1
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Mariusz Felisiak):
Replying to [comment:1 Natalia Bidart]:
> Thank you Mariusz, I think you proposal makes sense. I'm accepting but
could you share your use case in the ticket for future reference?
Sure, I'm adding actions dynamically based on the queryset, so separate
action for each object, something like:
{{{#!python
def get_actions(
self,
request,
action_location=admin.ActionLocation.CHANGE_LIST,
):
actions: dict[str, admin.Action] = super().get_actions(
request,
action_location=action_location,
)
for some_obj in SomeModel.objects.all():
name = f"add_{
some_obj.pk}"
description = f"Add {
some_obj.name}"
actions[name] = admin.Action(
func=functools.partial(add_some_obj_action,
some_obj=some_obj),
name=name,
description=description,
plural_description=description,
locations=[
admin.ActionLocation.CHANGE_LIST,
admin.ActionLocation.CHANGE_FORM,
],
)
return actions
}}}
I was surprised that I can use `admin.ActionLocation` but not
`admin.Action`. The second thing is that our docs point to the
`django.contrib.admin` module, that's why `[source]` is not visible for
`Action`, check out
https://docs.djangoproject.com/en/6.1/ref/contrib/admin/actions/#action.
--
Ticket URL: <
https://code.djangoproject.com/ticket/37176#comment:2>