SciPost Code Repository

Skip to content
Snippets Groups Projects
submission.py 1.52 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 Submission
from ..serializers import SubmissionSerializer


class SubmissionFilterSet(df_filters.FilterSet):
    class Meta:
        model = Submission
        fields = {
            'title': ['icontains', 'istartswith', 'iregex'],
            'author_list': ['icontains', 'iregex'],
            'abstract': ['icontains', 'iregex'],
            'submission_date': [
                'date__year', 'date__month', 'date__exact',
                'date__year__gte', 'date__year__lte', 'date__year__range',
                'date__gte', 'date__lte', 'date__range'
            ],
            'acad_field__name': ['icontains',],
            'specialties__name': ['icontains',],
            'topics__name': ['icontains',],
        }


class SubmissionViewSet(FilteringOptionsActionMixin,
                         viewsets.ReadOnlyModelViewSet):
    queryset = Submission.objects.public_newest()
    permission_classes = [AllowAny,]
    serializer_class = SubmissionSerializer
    search_fields = ['title', 'author_list', 'abstract']
    ordering_fields = ['submission_date',]
    filterset_class = SubmissionFilterSet
    default_filtering_fields = [
        'title__icontains',
        'author_list__icontains',
        'abstract__icontains'
    ]