summaryrefslogtreecommitdiff
path: root/journal/api/views.py
blob: a88e56068dbcefd367bba0be249ec1783b417593 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from rest_framework import viewsets
from rest_framework import filters
import datetime

from . import serializers
from . import models


class CustomDateFilterBackend(filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        if "today" in request.query_params:
            today = datetime.date.today()
            queryset = queryset.filter(created__month=today.month, created__day=today.day)
        day = request.query_params.get("day")
        if day:
            try:
                queryset = queryset.filter(created__day=day)
            except ValueError:
                pass
        month = request.query_params.get("month")
        if month:
            try:
                queryset = queryset.filter(created__month=month)
            except ValueError:
                pass
        year = request.query_params.get("year")
        if year:
            try:
                queryset = queryset.filter(created__year=year)
            except ValueError:
                pass
        return queryset


class EntrySerializer(viewsets.ReadOnlyModelViewSet):
    queryset = models.Entry.objects.all()
    serializer_class = serializers.EntrySerializer
    filter_backends = [
        CustomDateFilterBackend, filters.OrderingFilter, filters.SearchFilter]
    search_fields = ["html_text"]
    ordering_fields = ["created"]