from .models import ( Dossier, Proposal, Vote ) from rest_framework import ( filters, viewsets, ) from representatives_votes.serializers import ( DossierDetailSerializer, DossierSerializer, ProposalDetailSerializer, ProposalSerializer, VoteSerializer, ) class DossierViewSet(viewsets.ReadOnlyModelViewSet): """ API endpoint that allows dossiers to be viewed. """ queryset = Dossier.objects.all() serializer_class = DossierSerializer filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) filter_fields = { 'fingerprint': ['exact'], 'title': ['exact', 'icontains'], 'reference': ['exact', 'icontains'], } search_fields = ('title', 'fingerprint', 'reference', 'text', 'proposals__title') ordering_fields = ('id', 'reference') def list(self, request): return super(DossierViewSet, self).list(request) def retrieve(self, request, pk=None): self.serializer_class = DossierDetailSerializer return super(DossierViewSet, self).retrieve(request, pk) class ProposalViewSet(viewsets.ReadOnlyModelViewSet): """ API endpoint that allows proposals to be viewed. """ queryset = Proposal.objects.all() serializer_class = ProposalSerializer filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) filter_fields = { 'fingerprint': ['exact'], 'dossier__fingerprint': ['exact'], 'title': ['exact', 'icontains'], 'description': ['icontains'], 'reference': ['exact', 'icontains'], 'datetime': ['exact', 'gte', 'lte'], 'kind': ['exact'], } search_fields = ('title', 'fingerprint', 'reference', 'dossier__fingerprint', 'dossier__title', 'dossier__reference') ordering_fields = ('id', 'reference') def list(self, request): return super(ProposalViewSet, self).list(request) def retrieve(self, request, pk=None): self.serializer_class = ProposalDetailSerializer return super(ProposalViewSet, self).retrieve(request, pk) class VoteViewSet(viewsets.ReadOnlyModelViewSet): """ API endpoint that allows proposals to be viewed. """ queryset = Vote.objects.all() serializer_class = VoteSerializer filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) filter_fields = { 'proposal__fingerprint': ['exact'], 'position': ['exact'], 'representative_name': ['exact', 'icontains'], 'representative': ['exact'] } def list(self, request): return super(VoteViewSet, self).list(request) def retrieve(self, request, pk=None): return super(VoteViewSet, self).retrieve(request, pk)