diff --git a/api/mixins.py b/api/mixins.py new file mode 100644 index 0000000..6aa69c9 --- /dev/null +++ b/api/mixins.py @@ -0,0 +1,32 @@ +class ReadWriteSerializerMixin(object): + """ + Overrides get_serializer_class to choose the read serializer + for GET requests and the write serializer for POST requests. + + Set read_serializer_class and write_serializer_class attributes on a + viewset. + """ + + read_serializer_class = None + write_serializer_class = None + + def get_serializer_class(self): + if self.action in ["create", "update", "partial_update", "destroy"]: + return self.get_write_serializer_class() + return self.get_read_serializer_class() + + def get_read_serializer_class(self): + assert self.read_serializer_class is not None, ( + "'%s' should either include a `read_serializer_class` attribute," + "or override the `get_read_serializer_class()` method." + % self.__class__.__name__ + ) + return self.read_serializer_class + + def get_write_serializer_class(self): + assert self.write_serializer_class is not None, ( + "'%s' should either include a `write_serializer_class` attribute," + "or override the `get_write_serializer_class()` method." + % self.__class__.__name__ + ) + return self.write_serializer_class \ No newline at end of file