Django Rest Framework 中用户特定的序列化程序

User specific Serializers in Django Rest Framework

我正在我的 DRF 中创建序列化器,到目前为止它运行良好,问题是它显示了所有用户的数据

serializers.py

from rest_framework import serializers
from .models import Quiz


class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Quiz
        fields = ('foo', 'bar')

如何使我的序列化器特定于用户,使其仅 returns 使用该应用程序的用户的数据?

Views.py

class TodoView(viewsets.ModelViewSet):
  serializer_class = TodoSerializer
  queryset = Quiz.objects.all()

用户特定过滤与序列化程序无关。序列化程序用于转换复杂的 python 对象 to/from 可以在 JSON/XML 中呈现的本机 python 数据类型等。在您的视图中进行过滤很方便。下面是一个使用 mixins 的例子:

# views.py
from .models import Quiz
from .serializers import TodoSerializer
from rest_framework import mixins, viewsets
from rest_framework.response import Response

class TodoListViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
    queryset = models.Quiz.objects.all()
    serializer_class = TodoSerializer

    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        # filter your todos here
        queryset = queryset.filter(user=request.user)

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)