多个序列化器类同时调用的问题
同时调用多个序列化器类问题
调用序列化器类需要用到框架中封装好的一个方法get_serialzier_class来实现
一、视图集中调用
1. view.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from .serializers import Student1ModelSerializer class Studnet1GenericAPIView(GenericAPIView): queryset = Student.objects.all() serializer_class = Student1ModelSerializer def get_serializer_class(self): # 在框架中提供了get_serializerz-class方法来重写序列化器类,可以为不同的方法提供对应的序列化器类 # 这样的话一个视图类中可以同时调用多个序列化器类 if self.request.method == 'GET': # 注意:这里的方法名必须使用大写, 小写的话系统会识别错误 # 具体使用哪个序列化器类需要判读request对应的方法,注意从前端传递过来的已经包括request, # 这里可以直接通过self来调用,但是一般我们在方法中需要写明reqeust参数 return Student1ModelSerializer else: return StudentModelSerializer def get(self, request): # 获取所有数据中的id和name字段 student_list = self.get_queryset() serializer = self.get_serializer(instance=student_list, many=True) return Response(serializer.data) def post(self, request): # 往数据库中添加一条数据 data_dict = request.data serializer = self.get_serializer(data=data_dict) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data)
2. urls.py
1 urlpatterns = [ 2 path('student5/', views.Studnet1GenericAPIView.as_view()), 3 ]
二、视图集中调用
1. view.py
1 # 视图集中调用多个序列化器类 2 from rest_framework.viewsets import ModelViewSet 3 class StudentModelViewSet(ModelViewSet): 4 queryset = Student.objects.all() 5 serializer_class = Student1GenericAPIView 6 def get_serializer_class(self): 7 if self.action == 'list': 8 # 注意:这里直接是在self下的action属性进行判断, 9 # 这里不能添加request,因为它不具备actin属性 10 return StudentModelSerializer 11 else: 12 return Student1ModelSerializer
2. urls.py
1 urlpatterns = [ 2 path('student6/', views.StudentModelViewSet.as_view({'get': 'list'})), 3 path('student6/<int: pk>', views.StudentModelViewSet.as_view({'get': 'retrieve'})), 4 ] 5 # 实例化路由类 6 # 视图类默认只会给视图集中的基本api接口生成地(生成一条、生成多条、更新一条、删除一条、添加一条数据) 7 # 我们自己编写的处理方法名(例如:get_10等),视图类并不会生成地址 8 from rest_framework.routers import SimpleRouter, DefaultRouter 9 router = DefaultRouter() 10 # 注册视图集类 11 router.register('student6', views.StudentModelViewSet) 12 # 把注册好的视图类拼接到urlpatterns中 13 urlpatterns += router
三、脑图