Admin.SimpleListFilter с именем related_query_name для фильтрации вхождений

Я пытаюсь отфильтровать элементы в списке администратора:

class Product(models.Model):
    name = models.CharField("name", max_length = 128)

    def associated_stores(self):
        stores = set([f"""{s.number}""" for sin self.store_name.all()])
        if len(stores) == 0:
            return None
        return ", ".join(stores)

class Store(models.Model):
    products = models.ManyToManyField(Product, related_name = "%(class)s_name", related_query_name = "product_store_qs", blank = True)
    number = ...

Теперь я хочу реализовать SimpleListFilter, который может фильтровать в списке продуктов продукты, которые не доступны ни в одном магазине, или показывать названия магазинов:

class AssociatedStoresFilter(admin.SimpleListFilter):
    title = "associated stores"
    parameter_name = "assoc_stores"

    def lookups(self, request, model_admin):
        return [(True, "yes"), (False, "no")]

    def queryset(self, request, queryset):
        qs = queryset.annotate(assoc_stores = Case(When(product_store_qs__isnull = False, then = 1), default = 0))
        if self.value() == "False":
            return qs.filter(assoc_stores = 0)
        elif self.value() == "True":
            return qs.filter(assoc_stores = 1)
        else:
            return queryset

Фильтр по отсутствию товара в магазинах работает, но фильтр, в котором должны быть показаны только товары, доступные в магазине, показывает одну запись для каждого магазина товара (со всеми магазинами), вместо только одной записи (со всеми магазинами).

Как сократить результаты, чтобы каждый продукт после фильтрации сохранялся только один раз?

Вернуться на верх