根据是否有pk 切换序列化器
get_serializer_class源码
def get_serializer_class(self):
"""
Return the class to use for the serializer.
Defaults to using `self.serializer_class`.
You may want to override this if you need to provide different
serializations depending on the incoming request.
(Eg. admins get full serialization, others get basic serialization)
"""
assert self.serializer_class is not None, (
"'%s' should either include a `serializer_class` attribute, "
"or override the `get_serializer_class()` method."
% self.__class__.__name__
)
return self.serializer_class
views
class BlogView(ListModelMixin, RetrieveModelMixin, GenericViewSet):
# 根据是否有pk 切换序列化器,重写get_serializer_class
def get_serializer_class(self):
pk = self.kwargs.get('pk')
if pk:
return BlogDetailModelSerializer
return BlogModelSerializer