Initial commit
This commit is contained in:
parent
2d5801f226
commit
344d0908c7
1 changed files with 13 additions and 7 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.db.models import Prefetch
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.generics import (
|
from rest_framework.generics import (
|
||||||
GenericAPIView,
|
GenericAPIView,
|
||||||
|
|
@ -11,6 +12,7 @@ from rest_framework.response import Response
|
||||||
|
|
||||||
from newsreader.accounts.permissions import IsPostOwner
|
from newsreader.accounts.permissions import IsPostOwner
|
||||||
from newsreader.core.pagination import CursorPagination
|
from newsreader.core.pagination import CursorPagination
|
||||||
|
from newsreader.news.collection.models import CollectionRule
|
||||||
from newsreader.news.collection.serializers import RuleSerializer
|
from newsreader.news.collection.serializers import RuleSerializer
|
||||||
from newsreader.news.core.filters import ReadFilter, SavedFilter
|
from newsreader.news.core.filters import ReadFilter, SavedFilter
|
||||||
from newsreader.news.core.models import Category, Post
|
from newsreader.news.core.models import Category, Post
|
||||||
|
|
@ -63,10 +65,9 @@ class NestedRuleCategoryView(ListAPIView):
|
||||||
|
|
||||||
|
|
||||||
class NestedPostCategoryView(ListAPIView):
|
class NestedPostCategoryView(ListAPIView):
|
||||||
queryset = Category.objects.prefetch_related("rules", "rules__posts").all()
|
|
||||||
serializer_class = PostSerializer
|
serializer_class = PostSerializer
|
||||||
pagination_class = CursorPagination
|
pagination_class = CursorPagination
|
||||||
filter_backends = [ReadFilter]
|
filter_backends = [ReadFilter] # TODO: remove read filter usage
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
|
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
|
||||||
|
|
@ -75,13 +76,18 @@ class NestedPostCategoryView(ListAPIView):
|
||||||
# filtered on the user.
|
# filtered on the user.
|
||||||
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
|
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
|
||||||
|
|
||||||
category = get_object_or_404(self.queryset, **filter_kwargs)
|
rules_queryset = CollectionRule.objects.filter(user=self.request.user)
|
||||||
|
prefetch = Prefetch("rules", queryset=rules_queryset, to_attr="user_rules")
|
||||||
|
category_queryset = (
|
||||||
|
Category.objects
|
||||||
|
.prefetch_related(prefetch)
|
||||||
|
.filter(user=self.request.user)
|
||||||
|
)
|
||||||
|
category = get_object_or_404(category_queryset, **filter_kwargs)
|
||||||
|
|
||||||
self.check_object_permissions(self.request, category)
|
self.check_object_permissions(self.request, category)
|
||||||
|
|
||||||
rules = category.rules.values_list("id", flat=True)
|
return Post.objects.filter(rule__in=category.user_rules, read=False)
|
||||||
queryset = Post.objects.filter(rule__in=rules)
|
|
||||||
|
|
||||||
return queryset
|
|
||||||
|
|
||||||
|
|
||||||
class CategoryReadView(GenericAPIView):
|
class CategoryReadView(GenericAPIView):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue