diff --git a/.gitignore b/.gitignore index 1e2d987..3c61e67 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,7 @@ db.sqlite3-* main/media/* media/* - +env ## db.json ## diff --git a/main/urls.py b/main/urls.py index b81e71e..1060b04 100644 --- a/main/urls.py +++ b/main/urls.py @@ -18,6 +18,7 @@ router.register(r'carousel', views.CarouselImageViewSet) router.register(r'linit', views.LinitViewSet) router.register(r'timeline', views.TimelineViewSet) +router.register(r'timeline_monthly', views.MonthlyTimelineViewSet) router.register(r'alumni', views.AlumniViewSet) # In the latest DRF, We need to explicitly set base_name in our viewset url if we don't have queryset defined. router.register(r'alumni-by-year', views.AlumniByYearViewSet, basename="alumnibyyear") @@ -36,3 +37,4 @@ path('get_count/', views.GetCount.as_view(), name="get_count"), path('linit-pages/', views.LinitPages.as_view(), name="linit-pages"), ] + diff --git a/main/views.py b/main/views.py index ff29576..18c3bcb 100644 --- a/main/views.py +++ b/main/views.py @@ -1,3 +1,5 @@ +from calendar import month_name +from datetime import date from django.shortcuts import render from rest_framework import viewsets, generics from django.contrib.auth.models import User @@ -196,6 +198,28 @@ class TimelineViewSet(viewsets.ModelViewSet): serializer_class = serializers.TimelineSerializers http_method_names = ['get'] +class MonthlyTimelineViewSet(viewsets.ModelViewSet): + queryset = Timeline.objects.all() + serializer_class = serializers.TimelineSerializers + http_method_names = ['get'] + def get_queryset(self): + queryset = super().get_queryset() + return queryset.order_by('-event_time') + + def group_by_month_year(self, queryset): + current_year= date.today().year + + result = {f"{month} {year}": [] for year in range(current_year, current_year-3, -1) for month in month_name[1:]} + for obj in queryset: + + month_year = obj.event_time.strftime("%B %Y") + result.setdefault(month_year, []).append(serializers.TimelineSerializers(obj).data) + return result + + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + grouped_by_month_year = self.group_by_month_year(queryset) + return Response(grouped_by_month_year) class UpcomingEventViewSet(viewsets.ModelViewSet): queryset = Event.objects.all().filter(upcoming=True) @@ -217,4 +241,4 @@ class DevPostViewSet(viewsets.ModelViewSet): class ConfigViewSet(viewsets.ModelViewSet): queryset = Config.objects.all() serializer_class = serializers.ConfigSerializers - http_method_names = ['get'] \ No newline at end of file + http_method_names = ['get']