Commit 5fc2da48 authored by okhin's avatar okhin 🚴

FIX #184: Add a active_mandates= filter on queries

parent 3abe72b1
......@@ -32,6 +32,8 @@ from .models import (
WebSite,
)
from .filters import ActiveMandateQueryFilterBackend
class DefaultWebPagination(pagination.PageNumberPagination):
default_web_page_size = 10
......@@ -56,7 +58,8 @@ class RepresentativeViewSet(viewsets.ReadOnlyModelViewSet):
filters.DjangoFilterBackend,
filters.SearchFilter,
filters.OrderingFilter,
RQLFilterBackend
RQLFilterBackend,
ActiveMandateQueryFilterBackend
)
filter_fields = {
'active': ['exact'],
......
from datetime import datetime
from rest_framework.filters import BaseFilterBackend
from django.db.models import Q
from django.conf import settings
from .models import Mandate
class ActiveMandateQueryFilterBackend(BaseFilterBackend):
"""
A filter which check if a mandate is active for a reprensentative
the parameter used in the query to filter is, by default mandates_active
and it list a list of mandates among which one should be active.
"""
query_param = getattr(settings, 'ACTIVE_MANDATES_QUERY_PARAM', 'active_mandates')
def filter_queryset(self, request, queryset, view):
qs = queryset
if self.query_param in request.GET:
if len(request.GET[self.query_param]):
qs = qs.filter(mandates__in=Mandate.objects.filter(Q(end_date__gte=datetime.today)|
Q(end_date__isnull=True))
.filter(Q(group__name=request.GET[self.query_param]))).distinct()
return qs
return qs
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment