продукта. К товару можно задать несколько значений фильтра. Несколько значений образуют варианты для определенного фильтра (например цвет: белый, зеленный и тд) С клиентской части приходят идентификаторы значений фильтров, разбитые по группам [[1, 2, 3], [5, 6, 7]] где 1, 2, 3 отвечают за цвет, а 5, 6, 7 - к примеру, за размер. Задача состоит в фильтрации товаров для которых определен идентификатор значение фильтра одного из значений из первой группы и из второй (например цвет коричневый, размер 50 см). На данный момент решаю проблему так filter_ids_list = filter_dict.pop('filter')
q_objects = (Q(filters__value__id__in=ids) for ids in filter_ids_list)
filter_query = reduce(operator.and_, q_objects)
qs = Product.objects.active().filter(**filter_dict).filter(filter_query).distinct() но товары не фильтруются верно, может что-то я упустил ?
в чистом SQL решается относительно просто, в джангковском орме, только через OR, которые планировщики запросов обычно ой как не любят
Обсуждают сегодня