Opened 7 years ago

Last modified 4 years ago

#29519 closed Bug

Django admin actions: _selected_action disregarded when `difference` is applied to queryset via filters — at Version 2

Reported by: Andreas Galazis Owned by: nobody
Component: contrib.admin Version: 1.11
Severity: Normal Keywords:
Cc: Andreas Galazis Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Andreas Galazis)

I have an admin with filters where one of them is:

Code highlighting:

class NegatedMyFiledFilter(MyFieldListFilter):
    title = ('excluded Fields')
    parameter_name = 'nonField'

    def queryset(self, request, queryset):
        if self.values():
            queryset_to_negate = super(
                NegatedMyFieldFilter, self
            ).queryset(request, queryset)
            return queryset.difference(queryset_to_negate)

Where MyFieldListFilter is a filter that extends admin.SimpleListFilter
When the above filter is applied(alone or in combination with others) _selected_action is not respected when applying an action and as a result actions get applied to all records, not just the selected ones
As a hack I ended up doing in one of my custom actions (although this is applicable to all actions including build in ones like delete):

Code highlighting:

  qs_ids = queryset.values_list('pk', flat=True)
  selected_ids = request.POST.getlist('_selected_action',qs_ids)
  return TimeSheet.objects.filter(
      pk__in=qs_ids,
  ).filter(pk__in=selected_ids).update(my_flag=True)

but I was expecting the framework to do the second filtering for me
The above happens in version 1.11.13

Change History (2)

comment:1 by Andreas Galazis, 7 years ago

Cc: Andreas Galazis added
Component: Uncategorizedcontrib.admin
Description: modified (diff)
Version: 2.01.11

comment:2 by Andreas Galazis, 7 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top