Django REST Framework: Dynamic Fields in Serializers

Here’s the use case, I need to add some extra fields to my serializer depending on a request. For example, if the query string contains “extra=true”, then add the extra fields. Luckily, serializers get a “context” argument when they are initialized. We can use this to customize our serializers as needed.

The fields defined on a serializer are available in a instance variable named “fields”. So we can add/delete/edit fields from it. Let’s see an example:

Please note, here we have used another serializer (UserLocationSerializer) from inside our main serializer. The second one is being initialized by us. So it would not get the context. If we need to do something down there as well, then we need to pass it ourselves.

Now the second serializer will get the request too and we can use the same way to customize it!

4 Comments Django REST Framework: Dynamic Fields in Serializers

  1. Joel

    No longer the recommended way.


    The recommended way is

    1. maSnun

      I think you misunderstood the purpose. The field is added based on whether a certain GET parameter is passed or not. SerializerMethodField is always available.


Leave a Reply

Your email address will not be published. Required fields are marked *