mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-03 12:00:12 +03:00
Added optional support for Haystack's SearchQuerySet when using the DjangoFilterBackend with a fallback to other queryset like objects.
This commit is contained in:
parent
9c0da46209
commit
c15434e88c
|
@ -41,11 +41,23 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
|
|
||||||
if filter_class:
|
if filter_class:
|
||||||
filter_model = filter_class.Meta.model
|
filter_model = filter_class.Meta.model
|
||||||
|
|
||||||
|
# Haystack SearchQuerySet optional support
|
||||||
|
try:
|
||||||
|
from haystack.query import SearchQuerySet
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if isinstance(queryset, SearchQuerySet) and queryset.query.models != [filter_model]:
|
||||||
|
raise TypeError('The search queryset must be filtered with the FilterSet model %s. Got %s instead' % (filter_model, queryset.query.models))
|
||||||
|
|
||||||
assert issubclass(filter_model, queryset.model), \
|
# Django QuerySet support
|
||||||
'FilterSet model %s does not match queryset model %s' % \
|
from django.db.models.query import QuerySet
|
||||||
(filter_model, queryset.model)
|
|
||||||
|
if isinstance(queryset, QuerySet) and not issubclass(filter_model, queryset.model):
|
||||||
|
raise TypeError('FilterSet model %s does not match queryset model %s' % (filter_model, queryset.model))
|
||||||
|
|
||||||
|
# Other queryset-like objects
|
||||||
return filter_class
|
return filter_class
|
||||||
|
|
||||||
if filter_fields:
|
if filter_fields:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user