使用 GraphQL 在 django-graphene 中调用过滤器
Calling filters in django-graphene with GraphQL
我一直在关注 Django 中 Graphene-Python 的文档,并且刚刚进入自定义过滤器部分。虽然提供了有关如何 编写 自定义过滤器的教程,但没有关于如何在 GraphiQL 中 调用 它们的参考。如果我有以下示例代码:
class AnimalNode(DjangoObjectType):
class Meta:
# Assume you have an Animal model defined with the following fields
model = Animal
filter_fields = ['name', 'genus', 'is_domesticated']
interfaces = (relay.Node, )
class AnimalFilter(django_filters.FilterSet):
# Do case-insensitive lookups on 'name'
name = django_filters.CharFilter(lookup_expr=['iexact'])
class Meta:
model = Animal
fields = ['name', 'genus', 'is_domesticated']
@property # make your own filter like this
def qs(self):
return super(EquityFilter, self).qs.filter(id=self.request.user)
class Query(ObjectType):
animal = relay.Node.Field(AnimalNode)
# We specify our custom AnimalFilter using the filterset_class param
all_animals = DjangoFilterConnectionField(AnimalNode,
filterset_class=AnimalFilter)
我的问题是,我需要在 GraphiQL 中输入什么才能使用此过滤器?非常感谢任何帮助。
检查 GraphiQL 中的架构。它应该显示类似于此的根查询:
allAnimals(
before:String,
after:String,
firts:Int,
last:Int,
name:String,
genus:String,
isDomesticated:Boolean
):AnimalNodeConnection
三个过滤条件作为查询参数公开,因此您可以将它们与这样的查询一起使用:
query filteredAnimals{
allAnimals(
name:"Big Foot",
genus:"Unknown",
isDomesticated:false
) {
edges {
node {
name
genus
isDomesticated
}
}
}
}
这将使您与名为 "Big Foot"("big FOOT"、"Big foot" 等)的未驯化动物建立联系,属等于 "Unknown"。
注意: 在 FilterSet
元 class 上声明的过滤器以它们所做的过滤类型命名,例如 name_Icontains
、name_Iexact
。声明为 FilterSet
字段的过滤器(在您的情况下为名称过滤器)保持其名称不变,并扩展或 OVERRIDE 在 FilterSet
Meta class 中声明的过滤器.
我一直在关注 Django 中 Graphene-Python 的文档,并且刚刚进入自定义过滤器部分。虽然提供了有关如何 编写 自定义过滤器的教程,但没有关于如何在 GraphiQL 中 调用 它们的参考。如果我有以下示例代码:
class AnimalNode(DjangoObjectType):
class Meta:
# Assume you have an Animal model defined with the following fields
model = Animal
filter_fields = ['name', 'genus', 'is_domesticated']
interfaces = (relay.Node, )
class AnimalFilter(django_filters.FilterSet):
# Do case-insensitive lookups on 'name'
name = django_filters.CharFilter(lookup_expr=['iexact'])
class Meta:
model = Animal
fields = ['name', 'genus', 'is_domesticated']
@property # make your own filter like this
def qs(self):
return super(EquityFilter, self).qs.filter(id=self.request.user)
class Query(ObjectType):
animal = relay.Node.Field(AnimalNode)
# We specify our custom AnimalFilter using the filterset_class param
all_animals = DjangoFilterConnectionField(AnimalNode,
filterset_class=AnimalFilter)
我的问题是,我需要在 GraphiQL 中输入什么才能使用此过滤器?非常感谢任何帮助。
检查 GraphiQL 中的架构。它应该显示类似于此的根查询:
allAnimals(
before:String,
after:String,
firts:Int,
last:Int,
name:String,
genus:String,
isDomesticated:Boolean
):AnimalNodeConnection
三个过滤条件作为查询参数公开,因此您可以将它们与这样的查询一起使用:
query filteredAnimals{
allAnimals(
name:"Big Foot",
genus:"Unknown",
isDomesticated:false
) {
edges {
node {
name
genus
isDomesticated
}
}
}
}
这将使您与名为 "Big Foot"("big FOOT"、"Big foot" 等)的未驯化动物建立联系,属等于 "Unknown"。
注意: 在 FilterSet
元 class 上声明的过滤器以它们所做的过滤类型命名,例如 name_Icontains
、name_Iexact
。声明为 FilterSet
字段的过滤器(在您的情况下为名称过滤器)保持其名称不变,并扩展或 OVERRIDE 在 FilterSet
Meta class 中声明的过滤器.