Recherche à facette

Bon je pense que j’ai un truc qui marche, je surcharge FacetMixin de drf-haystack (celui qui fait des narrow tout le temps) avec une version qui “groupe” comme je l’entends :

class FacetMixinMultiSelect(FacetMixin):
    @action(detail=False, methods=["get"], url_path="facets")
    def facets(self, request):
        """Sets up a list route for ``faceted`` results.
        This will add ie ^search/facets/$ to your existing ^search pattern.

        Here we're grouping selected facets by fields so we can OR
        them inside the same fields.

        So:

            selected_facets=color:blue&selected_facets=color:red&selected_facets=size:L

        will translate to:

            (color:blue OR color:red) AND size:L
        """
        queryset = self.filter_facet_queryset(self.get_queryset())

        fields = defaultdict(list)

        for facet in request.query_params.getlist(self.facet_query_params_text):
            if ":" not in facet:
                continue

            field, value = facet.split(":", 1)
            fields[field].append(value)

        for field, values in fields.items():
            queryset = queryset.narrow(
                " OR ".join(
                    '%s:"%s"' % (field, queryset.query.clean(value)) for value in values
                )
            )

        serializer = self.get_facet_serializer(
            queryset.facet_counts(), objects=queryset, many=False
        )
        return Response(serializer.data)