[Django_Rest_Framework] Dynamic serializer fields

Rex Chiang
Jul 18, 2022

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

--

--