在 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, )
是否可以在我不使用中继时以这种方式使用过滤,或者它是否是仅中继功能?我在石墨烯文档中没有看到任何针对非中继的过滤,因此无法确定如何进行此操作。
是的,即使您不使用 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"
添加到您的查询中。