mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-13 17:52:19 +03:00
fix
This commit is contained in:
parent
e4fa8fe0b7
commit
30cd430c27
|
@ -113,6 +113,8 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
|||
if not _parent:
|
||||
_parent = is_parent_set(info)
|
||||
|
||||
source_class = default_manager.source
|
||||
|
||||
def new_resolver(root, info, **args):
|
||||
|
||||
#filters
|
||||
|
@ -122,7 +124,20 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
|||
qs = default_manager.filter()
|
||||
|
||||
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:
|
||||
qs = qs.order_by(order)
|
||||
|
|
|
@ -14,11 +14,16 @@ def get_filterset_class(filterset_class, **meta):
|
|||
|
||||
|
||||
def make_qs(filters):
|
||||
relationship_filters = {}
|
||||
for item in filters.items():
|
||||
if '__equal' in item[0]:
|
||||
if item[0].endswith('__equal'):
|
||||
filters.pop(item[0])
|
||||
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):
|
||||
|
|
Loading…
Reference in New Issue
Block a user