Django REST和ModelViewSet过滤 [英] Django REST and ModelViewSet filtering

查看:392
本文介绍了Django REST和ModelViewSet过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以前使用的APIViews如下:

I was previously using APIViews such as the following:

views.py

class AllProgramsApi(APIView):

    def get(self, request):
        user = self.request.user
        userprograms = Program.objects.filter(user=user)
        serializer = ProgramSerializer(userprograms, many=True)
        return Response(serializer.data)

这是我的模型:

class Program(models.Model):

    program_name = models.CharField(max_length=50)
    program_description = models.CharField(max_length=250)
    cycles = models.ManyToManyField(Cycle)
    is_favourite = models.BooleanField(default="False")
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('programs:program', kwargs={'pk': self.pk})

    def __str__(self):
        return self.program_name

现在,我发现了ModelViewSet,它看起来非常方便,但是我似乎无法为用户过滤我以前在APIView中进行过操作。

Now I've discovered ModelViewSet, which looks very convenient, but I can't seem to be able to filter for the user as I was previously doing in the APIView.

我尝试使用ModelViewSet进行views.py的操作是可行的,但我可以获取所有内容,而不仅仅是与单个用户相关的内容。

my attempt at views.py with ModelViewSet is the following and it works but I get all the content and not just the content related to a single user.

class AllProgramsApi(ModelViewSet):
    serializer_class = ProgramSerializer
    queryset = Program.objects.all()

如何调整ModelViewSet,使其仅显示与发送请求的用户相关的内容?最好的方法是什么?

How can I tweak the ModelViewSet so that it displays only the content related to the user who sends the request? What is the best method?

谢谢。

推荐答案

您可以使用获取查询集方法,如果您了解更多信息,请参考文档针对当前用户进行过滤

You can use get queryset method,if you know more refer the doc Filtering against the current user

class AllProgramsApi(ModelViewSet):
    serializer_class = ProgramSerializer
    queryset = Program.objects.all()
    def get_queryset(self):
        queryset = self.queryset
        query_set = queryset.filter(user=self.request.user)
        return query_set

这篇关于Django REST和ModelViewSet过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆