1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-21 05:49:37 +02:00

feat: Enhance AdventureViewSet to filter adventures based on visit status with improved boolean handling

This commit is contained in:
Sean Morley 2025-02-03 19:38:24 -05:00
parent ed1e24252c
commit ad5fb02ebb

View file

@ -1,3 +1,4 @@
from django.utils import timezone
from django.db import transaction from django.db import transaction
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db.models import Q, Max from django.db.models import Q, Max
@ -5,7 +6,6 @@ from django.db.models.functions import Lower
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
from adventures.models import Adventure, Category from adventures.models import Adventure, Category
from adventures.permissions import IsOwnerOrSharedWithFullAccess from adventures.permissions import IsOwnerOrSharedWithFullAccess
from adventures.serializers import AdventureSerializer from adventures.serializers import AdventureSerializer
@ -98,9 +98,17 @@ class AdventureViewSet(viewsets.ModelViewSet):
user_id=request.user.id user_id=request.user.id
) )
if is_visited.lower() in ['true', 'false']: is_visited_param = request.query_params.get('is_visited')
is_visited_bool = is_visited.lower() == 'true' if is_visited_param is not None:
queryset = queryset.filter(is_visited=is_visited_bool) # Convert is_visited_param to a boolean
is_visited_bool = (is_visited_param.lower() == 'true')
# Filter logic: "visited" means at least one visit with start_date <= today
now = timezone.now().date()
if is_visited_bool:
queryset = queryset.filter(visits__start_date__lte=now).distinct()
else:
queryset = queryset.exclude(visits__start_date__lte=now).distinct()
queryset = self.apply_sorting(queryset) queryset = self.apply_sorting(queryset)
return self.paginate_and_respond(queryset, request) return self.paginate_and_respond(queryset, request)