From 5b4d8144ee118f8f2cce03b9c1c6e30ae378f730 Mon Sep 17 00:00:00 2001 From: Alejandro Nunez Capote Date: Fri, 31 May 2019 22:43:08 -0400 Subject: [PATCH] changing `django_filters` types in the ES filters by `graphene` types --- graphene_django/elasticsearch/filter/filters.py | 7 +++---- graphene_django/filter/utils.py | 10 ++++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/graphene_django/elasticsearch/filter/filters.py b/graphene_django/elasticsearch/filter/filters.py index b1d6b9d..8c2faec 100644 --- a/graphene_django/elasticsearch/filter/filters.py +++ b/graphene_django/elasticsearch/filter/filters.py @@ -1,15 +1,13 @@ """Filters to ElasticSearch""" from collections import OrderedDict -from django_filters import CharFilter from elasticsearch_dsl import Q +from graphene import String class StringFilterES(object): # pylint: disable=R0902 """String Fields specific to ElasticSearch.""" default_expr = 'contain' - filter_class = CharFilter - variants = { "contain": lambda name, value: Q('match', **{name: { @@ -27,6 +25,7 @@ class StringFilterES(object): # pylint: disable=R0902 """ assert name or attr, "At least the field name or the field attr should be passed" self.field_name = name or attr.replace('.', '_') + self.argument = String().Argument() self.fields = self.generate_fields() def generate_fields(self): @@ -40,6 +39,6 @@ class StringFilterES(object): # pylint: disable=R0902 for variant in self.variants: variant_name = self.field_name if variant in ["default", self.default_expr] \ else "%s_%s" % (self.field_name, variant) - fields[variant_name] = self.filter_class(field_name=variant_name) + fields[variant_name] = self.argument return fields diff --git a/graphene_django/filter/utils.py b/graphene_django/filter/utils.py index cfa5621..1487793 100644 --- a/graphene_django/filter/utils.py +++ b/graphene_django/filter/utils.py @@ -1,4 +1,5 @@ import six +from graphene import Argument from .filterset import custom_filterset_factory, setup_filterset @@ -12,8 +13,13 @@ def get_filtering_args_from_filterset(filterset_class, type): args = {} for name, filter_field in six.iteritems(filterset_class.base_filters): - field_type = convert_form_field(filter_field.field).Argument() - field_type.description = filter_field.label + + if not isinstance(filter_field, Argument): + field_type = convert_form_field(filter_field.field).Argument() + field_type.description = filter_field.label + else: + field_type = filter_field + args[name] = field_type return args