Dynamic fields in serializer can retrieve the required fields from the model, and speed up the serializing if the query doesn’t need to retrieve all fields.
- Setup the dynamic serializer
class DynamicSerializer(serializers.ModelSerializer):
first= FirstSerializer()
second = SecondSerializer()
third = ThirdSerializer() def __init__(self, *args, **kwargs):
required_fields = kwargs.get("context", {}).get("fields")
super(DynamicSerializer, self).__init__(*args, **kwargs)
if required_fields:
required = set(required_fields)
existed = set(self.fields)
for field in existed - required:
self.fields.pop(field)
- Usage in view
fields = ["first", "third"]queryset = Model.objects.all()data = DynamicSerializer(queryset, context={"fields": fields}).data