[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

--

--

No responses yet