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
e8b23c47
Commit
e8b23c47
authored
Jun 25, 2015
by
Shtarev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
thin logic
parent
745d8d00
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
9 deletions
+13
-9
rest_framework/filters.py
+13
-9
No files found.
rest_framework/filters.py
View file @
e8b23c47
...
...
@@ -58,6 +58,7 @@ class DjangoFilterBackend(BaseFilterBackend):
class
Meta
:
model
=
queryset
.
model
fields
=
filter_fields
return
AutoFilterSet
return
None
...
...
@@ -98,22 +99,24 @@ class SearchFilter(BaseFilterBackend):
if
not
search_fields
:
return
queryset
if
settings
.
DATABASES
[
queryset
.
db
][
"ENGINE"
]
==
"django.db.backends.oracle"
:
# Remember queryset for Oracle db users
original_queryset
=
queryset
orm_lookups
=
[
self
.
construct_search
(
six
.
text_type
(
search_field
))
for
search_field
in
search_fields
]
and_queries
=
[]
for
search_term
in
self
.
get_search_terms
(
request
):
or_queries
=
[
models
.
Q
(
**
{
orm_lookup
:
search_term
})
for
orm_lookup
in
orm_lookups
]
and_queries
.
append
(
reduce
(
operator
.
or_
,
or_queries
))
queryset
=
queryset
.
filter
(
reduce
(
operator
.
or_
,
or_queries
))
if
settings
.
DATABASES
[
queryset
.
db
][
"ENGINE"
]
!=
"django.db.backends.oracle"
:
# Oracle db don't support distinct on *LOB fields
queryset
=
queryset
.
distinct
()
if
and_queries
:
# According to Oracle DB limits there is no capability to make a DISTINT on *LOB
if
settings
.
DATABASES
[
queryset
.
db
][
"ENGINE"
]
==
"django.db.backends.oracle"
:
pk_list
=
queryset
.
filter
(
reduce
(
operator
.
and_
,
and_queries
))
.
values_list
(
'pk'
,
flat
=
True
)
return
queryset
.
filter
(
pk__in
=
frozenset
(
pk_list
))
else
:
return
queryset
.
filter
(
reduce
(
operator
.
and_
,
and_queries
))
.
distinct
()
# distinct analogue for Oracle users
queryset
=
original_queryset
.
filter
(
pk__in
=
set
(
queryset
.
values_list
(
'pk'
,
flat
=
True
)))
return
queryset
...
...
@@ -182,6 +185,7 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend):
A filter backend that limits results to those where the requesting user
has read object level permissions.
"""
def
__init__
(
self
):
assert
guardian
,
'Using DjangoObjectPermissionsFilter, but django-guardian is not installed'
...
...
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