diff --git a/links/newsletter_views.py b/links/newsletter_views.py index 99d99b6..a580d33 100644 --- a/links/newsletter_views.py +++ b/links/newsletter_views.py @@ -5,6 +5,8 @@ from django.http import Http404 from rest_framework import viewsets, status from rest_framework.response import Response from rest_framework.pagination import PageNumberPagination +from django.utils import timezone +from datetime import datetime from .models import Newsletter from .forms import NewsletterForm from .serializers import NewsletterSerializer @@ -15,6 +17,54 @@ class NewsletterListView(ListView): context_object_name = 'newsletters' paginate_by = 10 + def get_queryset(self): + queryset = Newsletter.objects.all().order_by('-created_at') + + # Type filter + newsletter_type = self.request.GET.get('type') + if newsletter_type: + queryset = queryset.filter(type=newsletter_type) + + # Date range filter + date_from = self.request.GET.get('date_from') + date_to = self.request.GET.get('date_to') + + if date_from: + try: + date_from = datetime.strptime(date_from, '%Y-%m-%d') + queryset = queryset.filter(created_at__gte=date_from) + except ValueError: + pass + + if date_to: + try: + date_to = datetime.strptime(date_to, '%Y-%m-%d') + queryset = queryset.filter(created_at__lte=date_to) + except ValueError: + pass + + return queryset + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + # Add newsletter types for dropdown + context['newsletter_types'] = Newsletter.NewsletterType.choices + + # Add selected filters to context + context['selected_type'] = self.request.GET.get('type', '') + context['date_from'] = self.request.GET.get('date_from', '') + context['date_to'] = self.request.GET.get('date_to', '') + + # Check if any filter is applied + context['is_filtered'] = any([ + context['selected_type'], + context['date_from'], + context['date_to'] + ]) + + return context + class NewsletterDetailView(DetailView): model = Newsletter template_name = 'links/newsletter_detail.html' diff --git a/links/templates/links/newsletter_detail.html b/links/templates/links/newsletter_detail.html index dc745a6..d5696b9 100644 --- a/links/templates/links/newsletter_detail.html +++ b/links/templates/links/newsletter_detail.html @@ -66,20 +66,19 @@