Ignore any invalidly formed query parameters for OrderingFilter. by vimarshc · Pull Request #5131 · encode/django-rest-framework (original) (raw)

Closes #4989.

For using ordering filters, parameters are added to the URL in the following manner and the output is the listed in the increasing order of the passed parameter.

http://example.com/api/users?ordering=username

For decreasing order, the following URL is used:

http://example.com/api/users?ordering=-username

If multiple hyphens are added, it should be treated as an invalid ordering parameter and should be discarded. The failing testcase's error traceback is as follows:

 tests/test_filters.py:778: in test_incorrecturl_ordering
    response = view(request)
../venv-test/lib/python2.7/site-packages/django/views/decorators/csrf.py:58: in wrapped_view
    return view_func(*args, **kwargs)
../venv-test/lib/python2.7/site-packages/django/views/generic/base.py:68: in view
    return self.dispatch(request, *args, **kwargs)
rest_framework/views.py:489: in dispatch
    response = self.handle_exception(exc)
rest_framework/views.py:449: in handle_exception
    self.raise_uncaught_exception(exc)
rest_framework/views.py:486: in dispatch
    response = handler(request, *args, **kwargs)
rest_framework/generics.py:201: in get
    return self.list(request, *args, **kwargs)
rest_framework/mixins.py:40: in list
    queryset = self.filter_queryset(self.get_queryset())
rest_framework/generics.py:152: in filter_queryset
    queryset = backend().filter_queryset(self.request, queryset, self)
rest_framework/filters.py:277: in filter_queryset
    return queryset.order_by(*ordering)
../venv-test/lib/python2.7/site-packages/django/db/models/query.py:950: in order_by
    obj.query.add_ordering(*field_names)
../venv-test/lib/python2.7/site-packages/django/db/models/sql/query.py:1691: in add_ordering
    raise FieldError('Invalid order_by arguments: %s' % errors)
E   FieldError: Invalid order_by arguments: [u'--text']