-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmixins.py
37 lines (29 loc) · 1.17 KB
/
mixins.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from .backends import GraphQLFilterBackend
class FilterMixin:
filter_backends = [GraphQLFilterBackend]
filter_arg = "filter"
def get_filter_backends(self):
return self.filter_backends
def get_filter_arg(self):
return self.filter_arg
def filter_queryset(self, queryset):
"""
Given a queryset, filter it with whichever filter backend is in use.
You are unlikely to want to override this method, although you may need
to call it either from a list view, or from a custom `get_object`
method if you want to apply the configured filtering backend to the
default queryset.
"""
for backend in list(self.filter_backends):
queryset = backend().filter_queryset(self.request, queryset, self)
return queryset
def get_filter_data(self):
"""
Called by the filter backend when determining how to filter
"""
if self.config.get("reference", False):
return self.reference_kwargs
return self.operation_kwargs.get(self.filter_arg, {})
def get_queryset(self):
qs = super().get_queryset()
return self.filter_queryset(qs)