This is a Django mixin that allows ModelAdmin classes to execute actions without selecting any objects on the change list of the Django Admin.
To implement it you need to include the Mixin as usual (see https://docs.djangoproject.com/en/1.10/topics/class-based-views/mixins/)
and define a class attribute called extended_actions
containing a list of string with the name of the actions that you want to be exectued
with empty queryset.
If in the action you want to use the same queryset that the user is seeing, you can use the get_filtered_queryset
method also provided by the mixin
@admin.register(Contact)
class ContactAdmin(ExtendedActionsMixin, admin.ModelAdmin):
list_display = ('name', 'country', 'state')
actions = ('export',)
extended_actions = ('export',)
def export(self, request, queryset):
if not queryset:
# if not queryset use the queryset filtered by the URL parameters
queryset = self.get_filtered_queryset(request)
# As usual do something with the queryset
Thank you @thibaut-singlefile! I do appreciate that you shared your changes. Since someone else finds it useful I will upgrade this Mixin so it works on the latest Django and Python 3.