SciPost Code Repository

Skip to content
Snippets Groups Projects
pubfraction.py 1.41 KiB
Newer Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django_filters import rest_framework as df_filters

from rest_framework import viewsets
from rest_framework.permissions import AllowAny

from api.viewsets.mixins import FilteringOptionsActionMixin

from ..models import OrgPubFraction
from ..serializers import PubFractionSerializer


class PubFractionFilterSet(df_filters.FilterSet):
    class Meta:
        model = OrgPubFraction
        fields = {
            'organization__name': ['icontains', 'istartswith', 'exact'],
            'organization__country': ['exact',],
            'publication__publication_date': [
                'year', 'month', 'exact',
                'year__gte', 'year__lte', 'year__range',
                'gte', 'lte', 'range'
            ],
            'fraction': ['gte', 'lte', 'exact']
        }


class PubFractionViewSet(FilteringOptionsActionMixin,
                         viewsets.ReadOnlyModelViewSet):
    queryset = OrgPubFraction.objects.all()
    permission_classes = [AllowAny,]
    serializer_class = PubFractionSerializer
    search_fields = [
        'organization__name',
        'publication__publication_date__year'
    ]
    ordering_fields = ['-publication_date',]
    filterset_class = PubFractionFilterSet
    default_filtering_fields = [
        'organization__name__icontains',
        'publication__publication_date__year__exact',
    ]