Skip to content

Instantly share code, notes, and snippets.

@rsudip90
Created May 12, 2019 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rsudip90/b0ca4774aa4935b021b962c2afe32187 to your computer and use it in GitHub Desktop.
Save rsudip90/b0ca4774aa4935b021b962c2afe32187 to your computer and use it in GitHub Desktop.
drf serializer class dynamic -- mixins.py
class GetSerializerClassMixin(object):
def get_serializer_class(self):
"""
A class which inhertis this mixins should have variable
`serializer_action_classes`.
Look for serializer class in self.serializer_action_classes, which
should be a dict mapping action name (key) to serializer class (value),
i.e.:
class SampleViewSet(viewsets.ViewSet):
serializer_class = DocumentSerializer
serializer_action_classes = {
'upload': UploadDocumentSerializer,
'download': DownloadDocumentSerializer,
}
@action
def upload:
...
If there's no entry for that action then just fallback to the regular
get_serializer_class lookup: self.serializer_class, DefaultSerializer.
"""
try:
return self.serializer_action_classes[self.action]
except (KeyError, AttributeError):
return super().get_serializer_class()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment