I have a set of nested serializers which have a depth
set on their respective Meta
classes. I'd like to programmatically change the depth based on parameters passed into in views.
class ResourceSerializer(serializers.ModelSerializer):
type = serializers.PrimaryKeyRelatedField(queryset=EntityType.objects.all())
tags = serializers.PrimaryKeyRelatedField(queryset=Tag.objects.all(), many=True)
class Meta:
model = Resource
fields = ('id', 'type', 'uri', 'tags', 'created_date')
depth = 1
Unfortunately, there doesn't seem to be a way to override the depth
attribute at runtime. My current solution has been to inherit the "shallow" serializers and override their Meta classes to adjust the depth.
class ResourceNestedSerializer(ResourceSerializer):
class Meta(ResourceSerializer.Meta):
depth = 2
And in my view:
if nested:
serializer = ContainerNestedSerializer(containers, many=True)
else:
serializer = ContainerSerializer(containers, many=True)
return Response(serializer.data)
Is there any way to adjust depth
before calling serializer.data
?
Here is my code that incorporates including/excluding fields, as well as dynamically adjusting the depth. Adjust it to your taste. :)