Skip to content

Instantly share code, notes, and snippets.

@donspaulding
Created June 29, 2013 02:09
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 donspaulding/5889371 to your computer and use it in GitHub Desktop.
Save donspaulding/5889371 to your computer and use it in GitHub Desktop.
class MyBaseViewSet(viewsets.ModelViewSet):
def get_nested_serializer_class(self, serializer_class, related_name):
lookup_key = (serializer_class, related_name)
return serializers.NESTED_SERIALIZER_FIELD_MAP[lookup_key]
def get_serializer(self, *args, **kwargs):
serializer = super(MyBaseViewSet, self).get_serializer(*args, **kwargs)
context = self.get_serializer_context()
embed_str = context['request'].QUERY_PARAMS.get('embed', '')
if not embed_str:
return serializer
serializer_class = self.get_serializer_class()
for field in embed_str.split('|'):
related_name, delimiter, nested_fields = field.partition(':')
nested_serializer_class, to_many = self.get_nested_serializer_class(
serializer_class,
related_name
)
default_fields = ['resource_uri', 'absolute_uri']
additional_fields = nested_fields.split(',') if nested_fields else []
serializer.fields[related_name] = partially_nested(
nested_serializer_class,
serializer_kwargs=dict(many=to_many),
include_fields=default_fields + additional_fields
)
return serializer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment