哪个类正在调用Django REST中的Serializer类



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

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_representation视图中,我只想知道哪个API当前正在调用序列化程序。

通过访问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

最新更新