To define a custom mixin we just need to create a class inheriting from
Let's assume that we want to define two separate views for a model named
MyModel. Those views will share the same
queryset and the same
serializer_class. We will save ourselves some code repetition and we will put the above in a single mixin to be inherited by our views:
my_app/views.py (that is not the only file option available to place our custom mixins, but it is the less complex):
from rest_framework.generics import CreateAPIView, RetrieveUpdateAPIView from rest_framework.permissions import IsAdminUser class MyCustomMixin(object): queryset = MyModel.objects.all() serializer_class = MyModelSerializer class MyModelCreateView(MyCustomMixin, CreateAPIView): """ Only an Admin can create a new MyModel object """ permission_classes = (IsAdminUser,) Do view staff if needed... class MyModelCreateView(MyCustomMixin, RetrieveUpdateAPIView): """ Any user can Retrieve and Update a MyModel object """ Do view staff here...
Mixins are essentially blocks of reusable code for our application.