Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to retrieve all items created by a user using the django rest framework

I am trying to get only courses belonging to a particular user below I have the model, serializer and view I am using to try and achieve this. If I delete the entire get_queryset function from the view the api returns the appropriate user and every course created by every user. If get_queryset remains, the api always returns user not found and still gives every course that exists. Can anyone point me to how I can achieve my desired result.

view:

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    permission_classes = [IsProfileOwnerOrReadOnly]
    # queryset = User.objects.all()
    serializer_class = UserSerializer

    def get_queryset(self):
        user = self.request.user
        queryset = User.objects.all()
        if user is not None:
            queryset = queryset.filter(courses__owner_id=user.id)
        return queryset

serializer

class UserSerializer(serializers.ModelSerializer):
    courses = serializers.PrimaryKeyRelatedField(
        many=True, queryset=Course.objects.all())
    class Meta:
        model = User
        fields = ['id', 'username', 'courses']

Model

class Course (models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    pub_date = models.DateField(default=date.today)
    owner = models.ForeignKey('auth.User', related_name='courses', on_delete=models.CASCADE)
    def __str__(self):
        return self.title
like image 226
uhexos Avatar asked Nov 06 '25 16:11

uhexos


2 Answers

You need to filter objects by user

    class CreatePostsView(viewsets.ModelViewSet):
        model = Post
        serializer_class = PostsSerializer


        def get_queryset(self):
            user = self.request.user

            return Post.objects.filter(owner=user)
like image 191
Mr_klata Avatar answered Nov 09 '25 06:11

Mr_klata


class CoursesByOwnerView(RetrieveModelMixin, GenericViewSet):
        serializer_class = YourModelSerializer
        authentication_classes =[TokenAuthentication,]
        permission_classes = [IsAuthenticated,]
    

        def list(self, request, *args, **kwargs):
           course_taker = self.request.user
           courses = YourModel.objects.filter(owner=course_taker).values('your_model_fields')
           return Response(courses)

like image 30
aiotrope Avatar answered Nov 09 '25 07:11

aiotrope



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!