mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-14 02:02:20 +03:00
fix
This commit is contained in:
parent
e4fa8fe0b7
commit
30cd430c27
|
@ -113,6 +113,8 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
||||||
if not _parent:
|
if not _parent:
|
||||||
_parent = is_parent_set(info)
|
_parent = is_parent_set(info)
|
||||||
|
|
||||||
|
source_class = default_manager.source
|
||||||
|
|
||||||
def new_resolver(root, info, **args):
|
def new_resolver(root, info, **args):
|
||||||
|
|
||||||
#filters
|
#filters
|
||||||
|
@ -122,7 +124,20 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
||||||
qs = default_manager.filter()
|
qs = default_manager.filter()
|
||||||
|
|
||||||
if filters:
|
if filters:
|
||||||
qs = qs.filter().filter(make_qs(filters))
|
base_filters, relationship_filters = make_qs(filters)
|
||||||
|
qs = qs.filter().filter(base_filters)
|
||||||
|
|
||||||
|
if relationship_filters:
|
||||||
|
rels = {}
|
||||||
|
for item in relationship_filters.items():
|
||||||
|
rel_field = getattr(source_class, item[0], None)
|
||||||
|
if rel_field is None:
|
||||||
|
raise Exception('This relationship field not found '
|
||||||
|
'in source class')
|
||||||
|
node_class = rel_field.build_manager(0, item[0]).definition['node_class']
|
||||||
|
rels[item[0]] = node_class.nodes.get(uid=item[1])
|
||||||
|
for item in rels.items():
|
||||||
|
qs = qs.has(**{item[0]: item[1]})
|
||||||
|
|
||||||
if order:
|
if order:
|
||||||
qs = qs.order_by(order)
|
qs = qs.order_by(order)
|
||||||
|
|
|
@ -14,11 +14,16 @@ def get_filterset_class(filterset_class, **meta):
|
||||||
|
|
||||||
|
|
||||||
def make_qs(filters):
|
def make_qs(filters):
|
||||||
|
relationship_filters = {}
|
||||||
for item in filters.items():
|
for item in filters.items():
|
||||||
if '__equal' in item[0]:
|
if item[0].endswith('__equal'):
|
||||||
filters.pop(item[0])
|
filters.pop(item[0])
|
||||||
filters[item[0].split("__")[0]] = item[1]
|
filters[item[0].split("__")[0]] = item[1]
|
||||||
return reduce(lambda init, nx: init & Q(**{nx[0]: nx[1]}), filters.items(), Q())
|
elif item[0].endswith('__has'):
|
||||||
|
filters.pop(item[0])
|
||||||
|
relationship_filters[item[0].split("__")[0]] = item[1]
|
||||||
|
base_filters = reduce(lambda init, nx: init & Q(**{nx[0]: nx[1]}), filters.items(), Q())
|
||||||
|
return base_filters, relationship_filters
|
||||||
|
|
||||||
|
|
||||||
def get_filtering_args_from_filterset(filterset_class, type):
|
def get_filtering_args_from_filterset(filterset_class, type):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user