覆盖率显示测试 get_serializer_class 为未测试

Coverage show test get_serializer_class as untested

使用覆盖率显示测试 drf 视图必须覆盖的内容。并且覆盖显示所有视图都测试正常(由 unittest + dango 客户端覆盖 API)

但是覆盖率显示这部分需要覆盖:

def get_serializer_class(self): 
    return self.serializer_class ` 

我认为该代码可以删除,因为它没用(这不是我的代码):)

知道如何在 GenericAPIView 中覆盖过去的代码吗?感谢您的帮助

有两种指定序列化程序的方法class:

  1. 第一种方法是在 class 中设置 serializer_class 属性。
  2. 第二种方法是覆盖get_serializer_class()方法。

如果您已经在 class 中添加了 serializer_class 属性(第一种方法),那么 get_serializer_class() 肯定没用。

这是例子:

from django.contrib.auth.models import User
from myapp.serializers import UserSerializer
from rest_framework import generics

class UserList(generics.GenericAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

在大多数情况下,您应该使用第一种方法,因为通常您的 API 视图只需要一个序列化程序。第二种方法对动态行为很有用,例如使用不同的序列化程序进行读写操作,或者为不同类型的用户提供不同的序列化程序。

示例:

def get_serializer_class(self):
    if self.request.user.is_staff:
        return StaffSerializer
    return BasicSerializer