I have a \'through\' model governing a many to many relationship and i want to be able to return the \'through\' model and the target model as flat data, as opposed to havin
I didn't try it with HyperlinkedModelSerializer but with ModelSerializer you can make custom serializer class that supports flatten option.
class CustomModelSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
self.flatten = kwargs.pop('flatten', False)
super(CustomModelSerializer, self).__init__(*args, **kwargs)
def get_fields(self):
fields = super(CustomModelSerializer, self).get_fields()
for field_name, field in fields.items():
if getattr(field, 'flatten', False):
del fields[field_name]
for nested_field_name, nested_field in field.fields.iteritems():
nested_field.source = (field_name + '.' +
(nested_field.source or nested_field_name))
fields[nested_field_name] = nested_field
return fields
Usage:
class MembershipSerializer(CustomModelSerializer):
person = PersonSerializer(flatten=True)
class Meta:
model = Membership
fields = ('person', ...)
class PersonSerializer(CustomModelSerializer):
class Meta:
model = Person
fields = (...)