Commit 37815920 by Tom Christie

Update to master and tweak remaining issues

parents 055986b5 e8b23c47
...@@ -7,6 +7,7 @@ from __future__ import unicode_literals ...@@ -7,6 +7,7 @@ from __future__ import unicode_literals
import operator import operator
from functools import reduce from functools import reduce
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import models from django.db import models
from django.utils import six from django.utils import six
...@@ -59,6 +60,7 @@ class DjangoFilterBackend(BaseFilterBackend): ...@@ -59,6 +60,7 @@ class DjangoFilterBackend(BaseFilterBackend):
class Meta: class Meta:
model = queryset.model model = queryset.model
fields = filter_fields fields = filter_fields
return AutoFilterSet return AutoFilterSet
return None return None
...@@ -100,13 +102,20 @@ class SearchFilter(BaseFilterBackend): ...@@ -100,13 +102,20 @@ class SearchFilter(BaseFilterBackend):
if not search_fields: if not search_fields:
return queryset return queryset
original_queryset = queryset
orm_lookups = [self.construct_search(six.text_type(search_field)) orm_lookups = [self.construct_search(six.text_type(search_field))
for search_field in search_fields] for search_field in search_fields]
for search_term in self.get_search_terms(request): for search_term in self.get_search_terms(request):
or_queries = [models.Q(**{orm_lookup: search_term}) or_queries = [models.Q(**{orm_lookup: search_term})
for orm_lookup in orm_lookups] for orm_lookup in orm_lookups]
queryset = queryset.filter(reduce(operator.or_, or_queries)).distinct() queryset = queryset.filter(reduce(operator.or_, or_queries))
if settings.DATABASES[queryset.db]["ENGINE"] == "django.db.backends.oracle":
# distinct analogue for Oracle users
queryset = original_queryset.filter(pk__in=set(queryset.values_list('pk', flat=True)))
else:
queryset = queryset.distinct()
return queryset return queryset
...@@ -176,6 +185,7 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend): ...@@ -176,6 +185,7 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend):
A filter backend that limits results to those where the requesting user A filter backend that limits results to those where the requesting user
has read object level permissions. has read object level permissions.
""" """
def __init__(self): def __init__(self):
assert guardian, 'Using DjangoObjectPermissionsFilter, but django-guardian is not installed' assert guardian, 'Using DjangoObjectPermissionsFilter, but django-guardian is not installed'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment