mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-22 14:40:49 +03:00
Merge pull request #238 from jkimbo/order_by_camelcase
Convert `orderBy` value to snake case
This commit is contained in:
commit
b8a9e454fa
|
@ -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):
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue
Block a user