Skip to content

Commit 3ce4490

Browse files
zbyte64jkimbo
authored andcommitted
django-filter: resolve field along with lookup expression to pro… (#805)
* django-filter: resolve field along with lookup expression to properly resolve field * bring back django-filter with method test * remove dangling comment * refactor based on better knowledge of django-filters
1 parent e51e602 commit 3ce4490

File tree

1 file changed

+7
-16
lines changed

1 file changed

+7
-16
lines changed

graphene_django/filter/utils.py

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import six
22

3+
from django_filters.utils import get_model_field
34
from .filterset import custom_filterset_factory, setup_filterset
45

56

@@ -18,22 +19,12 @@ def get_filtering_args_from_filterset(filterset_class, type):
1819
if name in filterset_class.declared_filters:
1920
form_field = filter_field.field
2021
else:
21-
try:
22-
field_name, filter_type = name.rsplit("__", 1)
23-
except ValueError:
24-
field_name = name
25-
filter_type = None
26-
27-
# If the filter type is `isnull` then use the filter provided by
28-
# DjangoFilter (a BooleanFilter).
29-
# Otherwise try and get a filter based on the actual model field
30-
if filter_type != "isnull" and hasattr(model, field_name):
31-
model_field = model._meta.get_field(field_name)
32-
33-
if hasattr(model_field, "formfield"):
34-
form_field = model_field.formfield(
35-
required=filter_field.extra.get("required", False)
36-
)
22+
model_field = get_model_field(model, filter_field.field_name)
23+
filter_type = filter_field.lookup_expr
24+
if filter_type != "isnull" and hasattr(model_field, "formfield"):
25+
form_field = model_field.formfield(
26+
required=filter_field.extra.get("required", False)
27+
)
3728

3829
# Fallback to field defined on filter if we can't get it from the
3930
# model field

0 commit comments

Comments
 (0)