Django-filter IN фильтр поиска и список строк
Использую Graphene в Django для создания схемы Gql, теперь пытаюсь фильтровать внешние ключи с помощью списка строк. Вроде как работает, но не совсем.
schema.py
class CharInFilter(BaseInFilter, CharFilter):
pass
class ProductFilter(FilterSet):
softwares__name = CharInFilter(field_name="softwares__name", lookup_expr="in")
class Meta:
model = Product
fields = {"name": ["exact", "icontains"]}
class ProductType(DjangoObjectType):
class Meta:
model = Product
filterset_class = ProductFilter
interfaces = (graphene.relay.Node,)
query
query authorPageProducts {
user(slug: "john") {
productSet(softwares_Name: "Blender") {
edges {
node {
name
softwares {
name
}
}
}
}
}
}
Вот что работает, а что нет:
- softwares_Name: "Blender" -> correct
- softwares_Name: "Houdini" -> correct
- softwares_Name: "Blender,Houdini" -> пустой результат, не корректно
Я передаю строки, разделенные запятой. Можно/нужно ли передавать список строк в запросе Gql? Я не уверен, что это возможно/необходимо.
У меня есть продукты, которые имеют оба внешних ключа со значениями "Houdini" и "Blender", поэтому запрос с "Blender,Houdini" не должен быть пустым.
Я попробовал этот запрос в shell, и он правильный. Здесь я использовал список строк.
u = User.objects.get(id=2)
p = u.product_set.filter(softwares__name__in=["Blender", "Houdini"])
Вот некоторая информация из Django Debug Toolbar, чтобы увидеть SQL выражение для третьего случая.
SELECT COUNT(*) AS "__count"
FROM "shop_product"
INNER JOIN "shop_product_softwares"
ON ("shop_product"."id" = "shop_product_softwares"."product_id")
INNER JOIN "shop_software"
ON ("shop_product_softwares"."software_id" = "shop_software"."id")
WHERE ("shop_product"."author_id" = 2 AND "shop_software"."name" IN ('Blender,Houdini'))
Я не могу понять, где проблема, при запросе с использованием строки, разделенной запятыми, как советуют docs.
Спасибо