How To Exclude Parent When Serializer Is Nested When Using Django Rest Framework?
I feel like this is probably in the docs but I just can't seem to figure it out. If I've got a serializer with a ForeignKey included in its fields how do I exclude that FK when tha
Solution 1:
class DynamicFieldsModelSerializer(serializers.HyperlinkedModelSerializer):
"""
A HyperlinkedModelSerializer that takes an additional `fields` argument that
controls which fields should be displayed.
"""
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
exclude = kwargs.pop('exclude', None)
# Instantiate the superclass normally
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
if fields:
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields.keys())
for field_name in existing - allowed:
self.fields.pop(field_name)
if exclude:
# Drop fields that are specified in the `exclude` argument.
excluded = set(exclude)
for field_name in excluded:
try:
self.fields.pop(field_name)
except KeyError:
pass
extend EmployerSerializer with DynamicFieldsModelSerializer
class EmployerSerializer(DynamicFieldsModelSerializer):
class Meta:
model = Employer
fields = ('name', 'person')
class PersonSerializer(serializers.HyperlinkedModelSerializer):
employers = EmployerSerializer(exclude=('name',))
class Meta:
model = Person
fields = ('name', 'employers')
depth = 1
Post a Comment for "How To Exclude Parent When Serializer Is Nested When Using Django Rest Framework?"