Skip to content Skip to sidebar Skip to footer

Different Queryset Based On Permissions In Django Rest Framework

I have seen this link, but I didn't find anything related to my question helping it being resolved. Imagine we have to create a blog, in which posts have two status: is_draft publ

Solution 1:

Change your queryset like this in your viewset. That way, only your desired posts will be accessed/permitted by the view:

from django.shortcuts import render
from django.db.models import Q
from rest_framework import viewsets, permissions
# Create your views here.
from apps.posts.models import Post
from apps.posts.serializers import PostSerializer


class PostViewSet(viewsets.ModelViewSet):
    serializer_class = PostSerializer

    def get_permissions(self):
        if self.action == "create":
            self.permission_classes = [permissions.IsAuthenticated]

        return super(PostViewSet, self).get_permissions()

    def get_queryset(self, *args, **kwargs):
        current_user = self.request.user
        current_author = Author.objects.get(user=current_user) #assuming your author class has foreign key to user
        return Post.objects.filter(Q(author=current_author) | Q(is_draft=False))

Post a Comment for "Different Queryset Based On Permissions In Django Rest Framework"