调用多个序列化器

调用多个序列化器类问题

调用序列化器类需要用到框架中封装好的一个方法get_serialzier_class来实现

一、视图集中调用

1. view.py

View Code

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

三、脑图

posted @ 2019-12-28 13:12  大道至诚  阅读(191)  评论(0编辑  收藏  举报