From 9b450f94a5601b6d91e0ddce1d3bc482745ead18 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Thu, 28 Jul 2022 00:28:39 +0300 Subject: [PATCH] Rewrite Event and JobAd get_queryset --- webapp/views.py | 58 ++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/webapp/views.py b/webapp/views.py index 01848d2..84d8e0c 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -95,13 +95,8 @@ class EventViewSet(ModelViewSet): search_fields = ("id", "tags", "isPublished", "signupForm") def get_queryset(self): - - # TODO: For create and update, this return old data in signupForm field (prefetched)... - if ( - self.request.user.is_authenticated - or self.request.method == "POST" - or self.request.method == "PUT" - ): + # TODO: For create and update, this returns old data in signupForm field (prefetched at the start of request)... + if self.request.user.is_authenticated: return Event.objects.filter(deleted=False).prefetch_related( Prefetch( "signupForm", @@ -110,32 +105,23 @@ class EventViewSet(ModelViewSet): ) ) + # Hide deleted and unpublished objects... + query = Q(deleted=False, isPublished=True) + # and hide objects that are automatically unpublished + hideQuery = Q(autoUnpublish=False) | Q(unpublishAt__gt=timezone.now()) + query.add(hideQuery, Q.AND) + since = self.request.query_params.get("since", None) if since: - return ( - Event.objects.filter( - deleted=False, isPublished=True, end_time__gt=since - ) - .order_by("start_time") - .prefetch_related( - Prefetch( - "signupForm", - queryset=SignupForm.objects.filter(deleted=False, visible=True), - to_attr="filtered_signup_forms", - ) - ) - ) - return ( - Event.objects.filter( - deleted=False, isPublished=True, end_time__gt=timezone.now() - ) - .order_by("start_time") - .prefetch_related( - Prefetch( - "signupForm", - queryset=SignupForm.objects.filter(deleted=False, visible=True), - to_attr="filtered_signup_forms", - ) + query.add(Q(end_time__gt=since), Q.AND) + else: + query.add(Q(end_time__gt=timezone.now()), Q.AND) + + return Event.objects.filter(query).prefetch_related( + Prefetch( + "signupForm", + queryset=SignupForm.objects.filter(deleted=False, visible=True), + to_attr="filtered_signup_forms", ) ) @@ -170,10 +156,12 @@ class JobAdViewSet(ModelViewSet): def get_queryset(self): if self.request.user.is_authenticated: - return JobAd.objects.filter(deleted=False) - return JobAd.objects.filter( - deleted=False, isPublished=True, unpublishAt__gt=timezone.now() - ) + return JobAd.objects.filter(deleted=False).order_by("-publishAt") + + query = Q(deleted=False, isPublished=True) + hideQuery = Q(autoUnpublish=False) | Q(unpublishAt__gt=timezone.now()) + query.add(hideQuery, Q.AND) + return JobAd.objects.filter(query).order_by("-publishAt") def destroy(self, request, pk=None, *args, **kwargs): try: