Added optional support for Haystack's SearchQuerySet when using the DjangoFilterBackend with a fallback to other queryset like objects.

This commit is contained in:
Omer Katz 2013-12-12 11:33:54 +02:00
parent 9c0da46209
commit c15434e88c

View File

@ -41,11 +41,23 @@ class DjangoFilterBackend(BaseFilterBackend):
if filter_class:
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), \
'FilterSet model %s does not match queryset model %s' % \
(filter_model, queryset.model)
# Django QuerySet support
from django.db.models.query import QuerySet
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
if filter_fields: