CreateModelMixin
along with all other mixin classes (Eg. ListModelMixin
, UpdateModelMixin
etc) are defined in rest_framework/mixins.py
file.
These mixin classes provide all the basic CRUD
operations on a model. You just need to define a serializer_class
and queryset
in your generic view to perform all these operations. DRF has separated out these common functionality in separate mixin classes so that they can be injected/mixed-in in a view and used as and when required.
In the DRF source code, there’s a
get_serializer
method. It wasn’t
inherited from object and it’s not a method in theCreateModelMixin
class. Where does this method come from?
In the GenericAPIView
, get_serializer
method is defined. The combination of different mixin classes along with GenericAPIView
class provide us different generic views for different use cases.
class GenericAPIView(views.APIView):
"""
Base class for all other generic views.
"""
def get_serializer(self, *args, **kwargs):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
return serializer_class(*args, **kwargs)
Other generic views then inherit the relevant mixin
along with GenericAPIView
.
Eg. CreateAPIView
inherit the CreateModelMixin
along with GenericAPIView
to provide create-only
endpoints.
# rest_framework/generics.py
class CreateAPIView(mixins.CreateModelMixin,
GenericAPIView):
...