diff --git a/manage_events/api/filters.py b/manage_events/api/filters.py index 08e7543..cb88f8c 100644 --- a/manage_events/api/filters.py +++ b/manage_events/api/filters.py @@ -31,4 +31,10 @@ class EventFilter(filters.FilterSet): def filter_category(self, queryset, name, value): category = value.split(',') - return queryset.filter(category__title__in=category) \ No newline at end of file + return queryset.filter(category__title__in=category) + + # def filter_queryset(self, queryset): + # queryset = super().filter_queryset(queryset) + # if 'price_from' in self.data or 'price_to' in self.data: + # queryset = queryset.order_by('entry_fee') + # return queryset \ No newline at end of file diff --git a/manage_events/api/views.py b/manage_events/api/views.py index 73f71a7..5bfd641 100644 --- a/manage_events/api/views.py +++ b/manage_events/api/views.py @@ -1010,31 +1010,28 @@ class EventListView(generics.ListAPIView): def get_queryset(self): # Base queryset filtering active, non-draft, non-deleted events with end date in the future - print(f"queryparams is {self.request.query_params}") + queryset = Event.objects.filter( + active=True, + draft=False, + deleted=False, + end_date__gte=timezone.now().date() + ) - if self.request.query_params: - queryset = Event.objects.filter( - active=True, - draft=False, - deleted=False, - end_date__gte=timezone.now().date() - ) - else: + if not self.request.query_params: preferences = PrincipalPreference.objects.get(principal=self.request.user) preferred_categories_ids = preferences.preferred_categories.values_list( "id", flat=True ) - queryset = Event.objects.filter( - active=True, - draft=False, - deleted=False, - end_date__gte=timezone.now().date(), - category__in=preferred_categories_ids - ) + queryset = queryset.filter(category__in=preferred_categories_ids).order_by("start_date") + + return queryset + + def filter_queryset(self, queryset): + queryset = super().filter_queryset(queryset) # Get query parameters - latitude = self.request.query_params.get("latitude") - longitude = self.request.query_params.get("longitude") + latitude = self.request.query_params.get("latitude", "") + longitude = self.request.query_params.get("longitude", "") ordering = self.request.query_params.get("sort", "") # Handle nearest location sorting @@ -1042,8 +1039,7 @@ class EventListView(generics.ListAPIView): queryset = self.apply_nearest_filter(queryset, latitude, longitude) # Handle popularity and latest sorting - # if ordering: - queryset = self.apply_popularity_latest(queryset, ordering) + queryset = self.apply_sorting(queryset, ordering) return queryset @@ -1051,7 +1047,7 @@ class EventListView(generics.ListAPIView): gmaps_service = GoogleMapsservice() return gmaps_service.get_nearest_events(queryset, float(latitude), float(longitude)) - def apply_popularity_latest(self, queryset, ordering): + def apply_sorting(self, queryset, ordering): # Split ordering fields and process each field ordering_fields = [field.lstrip("-") for field in ordering.split(",")] @@ -1065,7 +1061,11 @@ class EventListView(generics.ListAPIView): queryset = queryset.annotate(popularity=Count("interaction_event")).order_by("-popularity") # order latest record and by default sorting - queryset = queryset.order_by("start_date") + if "latest" in ordering_fields: + queryset = queryset.order_by("start_date") + + if "price" in ordering_fields: + queryset = queryset.order_by('entry_fee') return queryset