Вызов фильтров в джанго-графене с GraphQL - PullRequest
0 голосов
/ 22 сентября 2018

Я следил за документацией к Graphene-Python в Django и только что сделал это в разделе о пользовательских фильтрах.Несмотря на то, что в руководстве описывается, как писать пользовательских фильтров, в 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, чтобы использовать этот фильтр ?Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 28 сентября 2018

Проверьте схему в 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.

...