Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
003c3041
Commit
003c3041
authored
May 15, 2017
by
Tom Christie
Committed by
GitHub
May 15, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5131 from vimarshc/issue4989
Ignore any invalidly formed query parameters for OrderingFilter.
parents
996e5873
7b4afdc7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
1 deletions
+20
-1
rest_framework/filters.py
+2
-1
tests/test_filters.py
+18
-0
No files found.
rest_framework/filters.py
View file @
003c3041
...
@@ -11,6 +11,7 @@ from functools import reduce
...
@@ -11,6 +11,7 @@ from functools import reduce
from
django.core.exceptions
import
ImproperlyConfigured
from
django.core.exceptions
import
ImproperlyConfigured
from
django.db
import
models
from
django.db
import
models
from
django.db.models.constants
import
LOOKUP_SEP
from
django.db.models.constants
import
LOOKUP_SEP
from
django.db.models.sql.constants
import
ORDER_PATTERN
from
django.template
import
loader
from
django.template
import
loader
from
django.utils
import
six
from
django.utils
import
six
from
django.utils.encoding
import
force_text
from
django.utils.encoding
import
force_text
...
@@ -268,7 +269,7 @@ class OrderingFilter(BaseFilterBackend):
...
@@ -268,7 +269,7 @@ class OrderingFilter(BaseFilterBackend):
def
remove_invalid_fields
(
self
,
queryset
,
fields
,
view
,
request
):
def
remove_invalid_fields
(
self
,
queryset
,
fields
,
view
,
request
):
valid_fields
=
[
item
[
0
]
for
item
in
self
.
get_valid_fields
(
queryset
,
view
,
{
'request'
:
request
})]
valid_fields
=
[
item
[
0
]
for
item
in
self
.
get_valid_fields
(
queryset
,
view
,
{
'request'
:
request
})]
return
[
term
for
term
in
fields
if
term
.
lstrip
(
'-'
)
in
valid_fields
]
return
[
term
for
term
in
fields
if
term
.
lstrip
(
'-'
)
in
valid_fields
and
ORDER_PATTERN
.
match
(
term
)
]
def
filter_queryset
(
self
,
request
,
queryset
,
view
):
def
filter_queryset
(
self
,
request
,
queryset
,
view
):
ordering
=
self
.
get_ordering
(
request
,
queryset
,
view
)
ordering
=
self
.
get_ordering
(
request
,
queryset
,
view
)
...
...
tests/test_filters.py
View file @
003c3041
...
@@ -764,6 +764,23 @@ class OrderingFilterTests(TestCase):
...
@@ -764,6 +764,23 @@ class OrderingFilterTests(TestCase):
{
'id'
:
1
,
'title'
:
'zyx'
,
'text'
:
'abc'
},
{
'id'
:
1
,
'title'
:
'zyx'
,
'text'
:
'abc'
},
]
]
def
test_incorrecturl_extrahyphens_ordering
(
self
):
class
OrderingListView
(
generics
.
ListAPIView
):
queryset
=
OrderingFilterModel
.
objects
.
all
()
serializer_class
=
OrderingFilterSerializer
filter_backends
=
(
filters
.
OrderingFilter
,)
ordering
=
(
'title'
,)
ordering_fields
=
(
'text'
,)
view
=
OrderingListView
.
as_view
()
request
=
factory
.
get
(
'/'
,
{
'ordering'
:
'--text'
})
response
=
view
(
request
)
assert
response
.
data
==
[
{
'id'
:
3
,
'title'
:
'xwv'
,
'text'
:
'cde'
},
{
'id'
:
2
,
'title'
:
'yxw'
,
'text'
:
'bcd'
},
{
'id'
:
1
,
'title'
:
'zyx'
,
'text'
:
'abc'
},
]
def
test_incorrectfield_ordering
(
self
):
def
test_incorrectfield_ordering
(
self
):
class
OrderingListView
(
generics
.
ListAPIView
):
class
OrderingListView
(
generics
.
ListAPIView
):
queryset
=
OrderingFilterModel
.
objects
.
all
()
queryset
=
OrderingFilterModel
.
objects
.
all
()
...
@@ -883,6 +900,7 @@ class OrderingFilterTests(TestCase):
...
@@ -883,6 +900,7 @@ class OrderingFilterTests(TestCase):
queryset
=
OrderingFilterModel
.
objects
.
all
()
queryset
=
OrderingFilterModel
.
objects
.
all
()
filter_backends
=
(
filters
.
OrderingFilter
,)
filter_backends
=
(
filters
.
OrderingFilter
,)
ordering
=
(
'title'
,)
ordering
=
(
'title'
,)
# note: no ordering_fields and serializer_class specified
# note: no ordering_fields and serializer_class specified
def
get_serializer_class
(
self
):
def
get_serializer_class
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment