taiga-back/greenmine/base/filters.py

43 lines
1.3 KiB
Python

# -*- coding: utf-8 -*-
from rest_framework import filters
class SimpleFilterBackend(filters.BaseFilterBackend):
_special_values_dict = {
'true': True,
'false': False,
'null': None,
}
def filter_queryset(self, request, queryset, view):
query_params = {}
if not hasattr(view, "filter_fields"):
return queryset
for field_name in view.filter_fields:
if field_name in request.QUERY_PARAMS:
field_data = request.QUERY_PARAMS[field_name]
if field_data in self._special_values_dict:
query_params[field_name] = self._special_values_dict[field_data]
else:
query_params[field_name] = field_data
if query_params:
queryset = queryset.filter(**query_params)
return queryset
class IsProjectMemberFilterBackend(SimpleFilterBackend):
def filter_queryset(self, request, queryset, view):
queryset = super(IsProjectMemberFilterBackend, self).filter_queryset(
request, queryset, view)
user = request.user
if user.is_authenticated():
queryset = queryset.filter(project__members=request.user)
return queryset