Source code for url_filter.backends.django

# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals

from django.db.models.constants import LOOKUP_SEP

from .base import BaseFilterBackend


[docs]class DjangoFilterBackend(BaseFilterBackend): supported_lookups = { 'contains', 'day', 'endswith', 'exact', 'gt', 'gte', 'hour', 'icontains', 'iendswith', 'iexact', 'in', 'iregex', 'isnull', 'istartswith', 'lt', 'lte', 'minute', 'month', 'range', 'regex', 'second', 'startswith', 'week_day', 'year', }
[docs] def get_model(self): return self.queryset.model
@property def includes(self): return filter( lambda i: not i.is_negated, self.specs ) @property def excludes(self): return filter( lambda i: i.is_negated, self.specs )
[docs] def prepare_spec(self, spec): return '{}{}{}'.format( LOOKUP_SEP.join(spec.components), LOOKUP_SEP, spec.lookup, )
[docs] def filter(self): include = {self.prepare_spec(i): i.value for i in self.includes} exclude = {self.prepare_spec(i): i.value for i in self.excludes} qs = self.queryset if include: qs = qs.filter(**include) if exclude: qs = qs.exclude(**exclude) return qs