Rewrite Feed get_queryset

This commit is contained in:
Aarni Halinen
2022-07-28 00:15:34 +03:00
parent ca8937d9f6
commit 7ffce4e929
+10 -14
View File
@@ -9,7 +9,7 @@ from django.http import HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods
from django_filters import rest_framework as filters
from django.db.models import Prefetch
from django.db.models import Prefetch, Q
from django.core.exceptions import ObjectDoesNotExist
from rest_framework import routers
from rest_framework.response import Response
@@ -61,23 +61,19 @@ class FeedViewSet(ModelViewSet):
search_fields = ("id", "tags", "isPublished")
def get_queryset(self):
# If admin page...
if self.request.user.is_authenticated:
# Return all objects expect those that are (soft) deleted
# Soft deleted objects can be edited (and completely deleted) via Django admin (for superadmins)
return Feed.objects.filter(deleted=False).order_by("-publishAt")
else:
objs = Feed.objects.filter(deleted=False, isPublished=True).order_by(
"-publishAt"
)
# TODO: Bad filtering. Rewrite!
result_ids = []
for obj in objs:
if obj.autoUnpublish:
if obj.unpublishAt > timezone.now():
result_ids.append(obj.id)
else:
result_ids.append(obj.id)
# 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)
return Feed.objects.filter(id__in=result_ids).order_by("-publishAt")
return Feed.objects.filter(query).order_by("-publishAt")
def destroy(self, request, pk=None, *args, **kwargs):
try: