fixed: filter title with tag and calendar issue

This commit is contained in:
bobbyvish
2024-11-28 16:05:32 +05:30
parent 76ac9413c4
commit 3f263b2af5
3 changed files with 51 additions and 63 deletions

View File

@@ -7,7 +7,7 @@ class EventFilter(filters.FilterSet):
"""
FilterSet for Event model.
"""
title = filters.CharFilter(field_name="title", lookup_expr="icontains")
title = filters.CharFilter(method="filter_title")
location = filters.CharFilter(field_name="venue__address", lookup_expr="icontains")
category = filters.CharFilter(method="filter_category")
start_date = filters.DateFilter(field_name="start_date", lookup_expr="gte")
@@ -29,6 +29,13 @@ class EventFilter(filters.FilterSet):
'age_group',
]
def filter_title(self, queryset, name, value):
if value:
return queryset.filter(
Q(title__icontains=value) | Q(tags__name__icontains=value)
).distinct()
return queryset
def filter_category(self, queryset, name, value):
category = value.split(',')
return queryset.filter(category__title__in=category)

View File

@@ -11,7 +11,7 @@ urlpatterns = [
name="add_event",
),
path("edit-event/<int:pk>/", views.EventEditAPIView.as_view(), name="event-edit"),
path("get-events/", views.EventsAPIView.as_view(), name="events"),
path(
"event/<int:pk>/",
views.EventDetailAPIView.as_view(),
@@ -135,6 +135,8 @@ urlpatterns = [
name="age_group_list"
),
path("get-events/calendar/", views.EventsCalenderAPIView.as_view(), name="events-calendar"),
# event list with filter
path(
"events/",

View File

@@ -199,67 +199,6 @@ class VenueDeleteAPIView(APIView):
)
class EventsAPIView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
filter = request.query_params.get("filter", None)
query = request.query_params.get("query", None)
category_id = request.query_params.get("category_id", None)
params = [
"expensive",
"cheap",
"preference",
"today",
"tomorrow",
"category",
"key_guest",
"tags",
]
if filter not in params:
return ApiResponse.error(
status=status.HTTP_400_BAD_REQUEST,
message=constants.FAILURE,
errors="No filter found",
)
try:
if filter == "today":
events = services.EventFilterService.filter_events_for_today()
elif filter == "tomorrow":
events = services.EventFilterService.filter_events_for_tomorrow()
elif filter == "key_guest":
events = services.EventFilterService.filter_events_by_search(
search_query=query
)
elif filter == "category" and category_id is not None:
events = services.EventFilterService.filter_events_by_category(
int(category_id)
)
else:
events = services.EventFilterService.filter_events(
filter_type=filter, principal=request.user
)
# serializer = EventDetailSerializer(
# events, context={"request": request}, many=True
# )
serializer = EventListSerializer(
events, context={"request": request}, many=True
)
return ApiResponse.success(
status=status.HTTP_200_OK,
message=constants.SUCCESS,
data=serializer.data,
)
except Exception as e:
return ApiResponse.error(
status=status.HTTP_400_BAD_REQUEST,
message=constants.FAILURE,
errors=str(e),
)
class MyEventsAPIView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
@@ -1040,6 +979,46 @@ class AgeGroupListView(APIView):
return ApiResponse.success(message=constants.SUCCESS, data=serializer.data)
class EventsCalenderAPIView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
try:
principal = request.user
queryset = Event.objects.filter(
active=True,
draft=False,
deleted=False,
end_date__gte=timezone.now().date()
)
# queryset = Event.objects.filter(
# ((Q(active=True) & Q(draft=False) & Q(deleted=False) & Q(end_date__gte=timezone.now().date())))
# )
preferences = PrincipalPreference.objects.get(principal=principal)
preferred_categories_ids = preferences.preferred_categories.values_list("id", flat=True)
# Filter the queryset to only include events in the user's preferred categories
queryset = queryset.filter(Q(category__in=preferred_categories_ids) | Q(principal=principal))
serializer = EventListSerializer(
queryset, context={"request": request}, many=True
)
return ApiResponse.success(
status=status.HTTP_200_OK,
message=constants.SUCCESS,
data=serializer.data,
)
except Exception as e:
return ApiResponse.error(
status=status.HTTP_400_BAD_REQUEST,
message=constants.FAILURE,
errors=str(e),
)
class EventListView(generics.ListAPIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]