Skip to content

Instantly share code, notes, and snippets.

@gonz
Created April 7, 2014 20:16

Revisions

  1. gonz created this gist Apr 7, 2014.
    26 changes: 26 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    class MultiSerializerViewSetMixin(object):
    def get_serializer_class(self):
    """
    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 MyViewSet(ViewSet):
    serializer_class = MyDefaultSerializer
    serializer_action_classes = {
    'list': MyListSerializer,
    'my_action': MyActionSerializer,
    }
    @action
    def my_action:
    ...
    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:
    return super(MultiSerializerViewSetMixin, self).get_serializer_class()