哪个类在Django REST中调用序列化程序类

2024-10-02 02:38:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个APIView类和一个ModelSerializer类。APIView类正在使用序列化程序类。有没有办法知道哪个APIView类正在调用序列化程序类? 我需要这2个APIView的单独表示视图

APIView类

class OwnerAllListAPIView(APIView):
    def get(self, request, *args, **kwargs):
        user = self.request.user
        all_list = ListName.objects.filter(owner=user).all()
        list_serializer = core_slr.ListNameSerializer(all_list, many=True)
        return response('Owner list', list_serializer.data, status.HTTP_200_OK)

class ListNameDetailAPIView(APIView):
    def get(self, request, *args, **kwargs):
        list_name = ListName.objects.filter(id=self.kwargs.get('list_name_id')).first()
        list_serializer = core_slr.ListNameSerializer(list_name)
        return response('list name detail view', list_serializer.data, status.HTTP_200_OK)

序列化程序类

class ListNameSerializer(serializers.ModelSerializer):
    class Meta:
        model = ListName
        fields = [
            'id', 'owner', 'name'
        ]

    def to_representation(self, instance):
        ret = super(ListNameSerializer, self).to_representation(instance)
        ret['owner'] = f"{instance.owner.first_name} {instance.owner.last_name}"
        ret['total_question'] = QuestionBank.objects.filter(list_name=instance).count()
        return ret

在to_表示视图中,我只想知道哪个API正在调用序列化程序


Tags: instancenameself程序get序列化requestdef
1条回答
网友
1楼 · 发布于 2024-10-02 02:38:25

通过访问Serializer的上下文,您可以轻松做到这一点,如下所示:

...
     def to_representation(self, instance):
        ret = super(ListNameSerializer, self).to_representation(instance)
        ret['owner'] = f"{instance.owner.first_name} {instance.owner.last_name}"
        ret['total_question'] = QuestionBank.objects.filter(list_name=instance).count()
        if self.context['view'].action == 'retrieve':
            pass # Do something
        elif self.context['view'].action == 'list':
            pass # Do the Other Thing
        return ret

相关问题 更多 >

    热门问题