From 05a9078629dddd6fbcdcecd28896014dc9aedc03 Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Thu, 4 Aug 2016 14:59:48 +0100 Subject: [PATCH] Update filter_kwargs as well and add test --- graphene/contrib/django/filter/fields.py | 9 ++++- .../django/filter/tests/test_fields.py | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/graphene/contrib/django/filter/fields.py b/graphene/contrib/django/filter/fields.py index d8457fa8..8795d568 100644 --- a/graphene/contrib/django/filter/fields.py +++ b/graphene/contrib/django/filter/fields.py @@ -1,3 +1,4 @@ +from ....utils import to_snake_case from ..fields import DjangoConnectionField from .utils import get_filtering_args_from_filterset, get_filterset_class @@ -26,7 +27,13 @@ class DjangoFilterConnectionField(DjangoConnectionField): filter_kwargs = self.get_filter_kwargs(args) order = self.get_order(args) if order: - qs = qs.order_by(order) + qs = qs.order_by(to_snake_case(order)) + if filterset_class.order_by_field in filter_kwargs: + filter_kwargs.update({ + filterset_class.order_by_field: to_snake_case( + filter_kwargs[filterset_class.order_by_field] + ) + }) return filterset_class(data=filter_kwargs, queryset=qs) def get_filter_kwargs(self, args): diff --git a/graphene/contrib/django/filter/tests/test_fields.py b/graphene/contrib/django/filter/tests/test_fields.py index 5b2875b2..d5bc652b 100644 --- a/graphene/contrib/django/filter/tests/test_fields.py +++ b/graphene/contrib/django/filter/tests/test_fields.py @@ -285,3 +285,38 @@ def test_global_id_multiple_field_explicit_reverse(): multiple_filter = filterset_class.base_filters['articles'] assert isinstance(multiple_filter, GlobalIDMultipleChoiceFilter) assert multiple_filter.field_class == GlobalIDMultipleChoiceField + + +def test_filter_filterset_order_by_camel_case(): + class ReporterFilterNode(DjangoNode): + + class Meta: + model = Reporter + filter_fields = ['first_name', 'articles'] + filter_order_by = True + + class Query(ObjectType): + all_reporters = DjangoFilterConnectionField(ReporterFilterNode) + reporter = NodeField(ReporterFilterNode) + + Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com') + Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com') + + query = ''' + query { + allReporters(orderBy: "firstName") { + edges { + node { + firstName + } + } + } + } + ''' + schema = Schema(query=Query) + result = schema.execute(query) + assert not result.errors + assert len(result.data['allReporters']['edges']) == 2 + # We should only get back a single article for each reporter + assert result.data['allReporters']['edges'][0]['node']['firstName'] == 'r1' + assert result.data['allReporters']['edges'][1]['node']['firstName'] == 'r2'