fixed: filter title with tag and calendar issue
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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/",
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user