From 8369051e14662aeb018bb262beeb2c329e690071 Mon Sep 17 00:00:00 2001 From: Clement Sauvage Date: Mon, 2 Aug 2021 23:21:44 +0200 Subject: [PATCH] Add MultiSelectRelatedOnlyFilter --- more_admin_filters/filters.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/more_admin_filters/filters.py b/more_admin_filters/filters.py index 549fc6b..8a41b54 100644 --- a/more_admin_filters/filters.py +++ b/more_admin_filters/filters.py @@ -190,6 +190,19 @@ class MultiSelectRelatedFilter(MultiSelectMixin, admin.RelatedFieldListFilter): } +class MultiSelectRelatedOnlyFilter(MultiSelectRelatedFilter): + def field_choices(self, field, request, model_admin): + pk_qs = ( + model_admin.get_queryset(request) + .distinct() + .values_list("%s__pk" % self.field_path, flat=True) + ) + ordering = self.field_admin_ordering(field, request, model_admin) + return field.get_choices( + include_blank=False, limit_choices_to={"pk__in": pk_qs}, ordering=ordering + ) + + class MultiSelectDropdownFilter(MultiSelectFilter): """ Multi select dropdown filter for all kind of fields.