Created
June 29, 2013 02:09
-
-
Save donspaulding/5889371 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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