在不使用 Relay 的情况下对石墨烯查询使用 django_filters

问题描述 投票:0回答:1

在 django 中使用带有中继的石墨烯时,可以选择在查询数据时使用过滤。

class AnimalNode(DjangoObjectType):
    class Meta:
        model = Animal
        filter_fields = ['name', 'genus', 'is_domesticated']
        OR
        filter_fields = {
            'name': ['exact', 'icontains', 'istartswith'],
            'genus': ['exact'],
            'is_domesticated': ['exact'],
        }
        interfaces = (relay.Node, )

是否可以在我不使用中继时以这种方式使用过滤,或者它是否是仅中继功能?我在石墨烯文档中没有看到任何针对非中继的过滤,因此无法确定如何进行此操作。

django graphene-python
1个回答
0
投票

是的,即使您不使用 Relay,也可以在 Graphene 中使用 DjangoObjectType 进行过滤。

filter_fields
属性是DjangoObjectType特有的,不限于Relay。

在使用 Graphene 和 DjangoObjectType 定义 GraphQL 模式时,您可以使用

filter_fields
属性来指定特定模型允许的过滤字段。您可以使用
filter_fields
属性来指定允许过滤的字段以及每个字段允许的过滤器类型。

例如,在您的代码片段中,您定义了

filter_fields
以允许按
name
genus
is_domesticated
进行过滤。您可以使用字符串列表为每个字段指定过滤器类型。在这种情况下,您已允许使用
name
exact
icontains
过滤
istartswith
,使用
genus
过滤
exact
,以及使用
is_domesticated
过滤
exact

要在 GraphQL 查询中使用此过滤功能,您只需将参数添加到您在

filter_fields
属性中指定的字段的查询中。例如,要通过
Animal
过滤
name
模型,您可以将参数
name_Icontains: "cat"
添加到您的查询中。

© www.soinside.com 2019 - 2024. All rights reserved.