使用 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_Icontainsname_Iexact。声明为 FilterSet 字段的过滤器(在您的情况下为名称过滤器)保持其名称不变,并扩展或 OVERRIDEFilterSet Meta class 中声明的过滤器.