mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-04-23 02:22:08 +03:00
bring back django-filter with method test
This commit is contained in:
parent
871e7b2a52
commit
15b661ae26
|
@ -877,7 +877,7 @@ def test_filter_filterset_based_on_mixin():
|
|||
filters = super(FilterSet, cls).get_filters()
|
||||
filters.update(
|
||||
{
|
||||
"reporter__email__in": django_filters.CharFilter(
|
||||
"viewer__email__in": django_filters.CharFilter(
|
||||
method="filter_email_in", field_name="reporter__email__in"
|
||||
)
|
||||
}
|
||||
|
@ -897,11 +897,16 @@ def test_filter_filterset_based_on_mixin():
|
|||
interfaces = (Node,)
|
||||
|
||||
class NewArticleFilterNode(DjangoObjectType):
|
||||
viewer = Field(NewReporterNode)
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
interfaces = (Node,)
|
||||
filterset_class = NewArticleFilter
|
||||
|
||||
def resolve_viewer(self, info):
|
||||
return self.reporter
|
||||
|
||||
class Query(ObjectType):
|
||||
all_articles = DjangoFilterConnectionField(NewArticleFilterNode)
|
||||
|
||||
|
@ -934,11 +939,11 @@ def test_filter_filterset_based_on_mixin():
|
|||
query = (
|
||||
"""
|
||||
query NodeFilteringQuery {
|
||||
allArticles(reporter_Email_In: "%s") {
|
||||
allArticles(viewer_Email_In: "%s") {
|
||||
edges {
|
||||
node {
|
||||
headline
|
||||
reporter {
|
||||
viewer {
|
||||
email
|
||||
}
|
||||
}
|
||||
|
@ -955,7 +960,7 @@ def test_filter_filterset_based_on_mixin():
|
|||
{
|
||||
"node": {
|
||||
"headline": article_1.headline,
|
||||
"reporter": {"email": reporter_1.email},
|
||||
"viewer": {"email": reporter_1.email},
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -6,12 +6,13 @@ from django.db.models.fields.related import ForeignObjectRel, RelatedField
|
|||
from .filterset import custom_filterset_factory, setup_filterset
|
||||
|
||||
|
||||
def get_field_parts_with_expression(model, query_expr):
|
||||
def get_field_parts_with_expression(model, field_name, lookup_expr):
|
||||
"""
|
||||
Traverses the model with a given query expression,
|
||||
returns the found fields along the path and the remaining expression
|
||||
"""
|
||||
parts = query_expr.split(LOOKUP_SEP)
|
||||
parts = field_name.split(LOOKUP_SEP) # + lookup_expr.split(LOOKUP_SEP)
|
||||
lparts = lookup_expr.split(LOOKUP_SEP)
|
||||
opts = model._meta
|
||||
fields = []
|
||||
|
||||
|
@ -20,7 +21,7 @@ def get_field_parts_with_expression(model, query_expr):
|
|||
try:
|
||||
field = opts.get_field(name)
|
||||
except FieldDoesNotExist:
|
||||
return fields, LOOKUP_SEP.join(parts[i:])
|
||||
return fields, LOOKUP_SEP.join(parts[i:] + lparts)
|
||||
|
||||
fields.append(field)
|
||||
if isinstance(field, RelatedField):
|
||||
|
@ -28,7 +29,7 @@ def get_field_parts_with_expression(model, query_expr):
|
|||
elif isinstance(field, ForeignObjectRel):
|
||||
opts = field.related_model._meta
|
||||
|
||||
return fields, "exact"
|
||||
return fields, lookup_expr
|
||||
|
||||
|
||||
def get_filtering_args_from_filterset(filterset_class, type):
|
||||
|
@ -46,8 +47,9 @@ def get_filtering_args_from_filterset(filterset_class, type):
|
|||
if name in filterset_class.declared_filters:
|
||||
form_field = filter_field.field
|
||||
else:
|
||||
fields, lookup_expr = get_field_parts_with_expression(model, name)
|
||||
assert fields, str((model, name, filterset_class))
|
||||
fields, lookup_expr = get_field_parts_with_expression(
|
||||
model, filter_field.field_name, filter_field.lookup_expr
|
||||
)
|
||||
model_field = fields[-1]
|
||||
filter_type = lookup_expr
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user