我一直在关注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中键入什么才能使用此过滤器?任何帮助将不胜感激。
答案 0 :(得分:1)
检查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
}
}
}
}
这将使您与属为“未知”的未驯化动物“大脚”(“大脚”,“大脚”等)建立联系。
注意:在FilterSet
元类上声明的过滤器是根据它们执行的过滤类型来命名的,例如name_Icontains
,name_Iexact
。声明为FilterSet
字段的过滤器(在您的情况下为名称过滤器)保持其名称不变,并且扩展或 OVERRIDE 过滤器在FilterSet
Meta类中声明。