调用多个序列化器
调用多个序列化器类问题
调用序列化器类需要用到框架中封装好的一个方法get_serialzier_class来实现
一、视图集中调用
1. view.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
三、脑图