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
          }
        }
      }
    }
  }
}

Вот что работает, а что нет:

  1. softwares_Name: "Blender" -> correct
  2. softwares_Name: "Houdini" -> correct
  3. 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.

Спасибо

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