Merge pull request #238 from jkimbo/order_by_camelcase

Convert `orderBy` value to snake case
This commit is contained in:
Syrus Akbary 2016-08-06 11:53:49 -07:00 committed by GitHub
commit b8a9e454fa
2 changed files with 43 additions and 1 deletions

View File

@ -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):

View File

@ -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'