A serializer that conditionally includes optional fields based on context.
Optional fields should be listed in Meta.read_optional_fields. To include them
in the output, pass a list via context['include_fields'] (for top-level serializers)
or context[<nested_path>]['include_fields'] (for nested serializers).
Examples:
class ChildSerializer(IncludeOptionalFieldsSerializerMixin, serializers.ModelSerializer):
extra = serializers.CharField()
class Meta:
model = Child
fields = ['id', 'extra']
read_optional_fields = ['extra']
class ParentSerializer(IncludeOptionalFieldsSerializerMixin, serializers.ModelSerializer):
child = ChildSerializer()
expensive = serializers.CharField()
class Meta:
model = Parent
fields = ['id', 'child', 'expensive']
read_optional_fields = ['expensive']
# Top-level usage (includes 'expensive' field)
ParentSerializer(instance, context={'include_fields': ['expensive']}).data
# Nested usage (includes 'extra' field inside child)
ParentSerializer(
instance,
context={'child': {'include_fields': ['extra']}}
).data