Giu*_*lia 2 python django django-views django-rest-framework
我之前使用的APIViews如下:
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)
Run Code Online (Sandbox Code Playgroud)
这是我的模特:
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
Run Code Online (Sandbox Code Playgroud)
现在我发现了ModelViewSet,它看起来非常方便,但我似乎无法像以前在APIView中那样过滤用户.
我对使用ModelViewSet的views.py的尝试如下,它可以工作,但我得到的所有内容,而不仅仅是与单个用户相关的内容.
class AllProgramsApi(ModelViewSet):
serializer_class = ProgramSerializer
queryset = Program.objects.all()
Run Code Online (Sandbox Code Playgroud)
如何调整ModelViewSet,使其仅显示与发送请求的用户相关的内容?什么是最好的方法?
谢谢.
Rob*_*ert 10
您可以使用get queryset方法,如果您了解更多,请参阅针对当前用户的doc Filtering
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2732 次 |
| 最近记录: |