mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-13 17:52:19 +03:00
changing django_filters
types in the ES filters by graphene
types
This commit is contained in:
parent
fc186ea23d
commit
5b4d8144ee
|
@ -1,15 +1,13 @@
|
||||||
"""Filters to ElasticSearch"""
|
"""Filters to ElasticSearch"""
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from django_filters import CharFilter
|
|
||||||
from elasticsearch_dsl import Q
|
from elasticsearch_dsl import Q
|
||||||
|
from graphene import String
|
||||||
|
|
||||||
|
|
||||||
class StringFilterES(object): # pylint: disable=R0902
|
class StringFilterES(object): # pylint: disable=R0902
|
||||||
"""String Fields specific to ElasticSearch."""
|
"""String Fields specific to ElasticSearch."""
|
||||||
|
|
||||||
default_expr = 'contain'
|
default_expr = 'contain'
|
||||||
filter_class = CharFilter
|
|
||||||
|
|
||||||
variants = {
|
variants = {
|
||||||
"contain": lambda name, value: Q('match',
|
"contain": lambda name, value: Q('match',
|
||||||
**{name: {
|
**{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"
|
assert name or attr, "At least the field name or the field attr should be passed"
|
||||||
self.field_name = name or attr.replace('.', '_')
|
self.field_name = name or attr.replace('.', '_')
|
||||||
|
self.argument = String().Argument()
|
||||||
self.fields = self.generate_fields()
|
self.fields = self.generate_fields()
|
||||||
|
|
||||||
def generate_fields(self):
|
def generate_fields(self):
|
||||||
|
@ -40,6 +39,6 @@ class StringFilterES(object): # pylint: disable=R0902
|
||||||
for variant in self.variants:
|
for variant in self.variants:
|
||||||
variant_name = self.field_name if variant in ["default", self.default_expr] \
|
variant_name = self.field_name if variant in ["default", self.default_expr] \
|
||||||
else "%s_%s" % (self.field_name, variant)
|
else "%s_%s" % (self.field_name, variant)
|
||||||
fields[variant_name] = self.filter_class(field_name=variant_name)
|
fields[variant_name] = self.argument
|
||||||
|
|
||||||
return fields
|
return fields
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import six
|
import six
|
||||||
|
from graphene import Argument
|
||||||
|
|
||||||
from .filterset import custom_filterset_factory, setup_filterset
|
from .filterset import custom_filterset_factory, setup_filterset
|
||||||
|
|
||||||
|
@ -12,8 +13,13 @@ def get_filtering_args_from_filterset(filterset_class, type):
|
||||||
|
|
||||||
args = {}
|
args = {}
|
||||||
for name, filter_field in six.iteritems(filterset_class.base_filters):
|
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
|
args[name] = field_type
|
||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
Loading…
Reference in New Issue
Block a user