Search code examples
djangodjango-rest-frameworkdjango-serializer

DRF: Do DRF serializers, SerializerMethodField have execution order


class ProfileAPI(serializers.Serializer):
    name = serializers.SerializerMethodField()
    age = serializers.SerializerMethodField()

    def get_name(self, obj):
        return "name"

    def age(self,obj):
        return 78

is there ordering while execution of SerilaizerMethodField or it is random, means will "get_name" is executed before "get_age".


Solution

  • The execution ordering goes by the order of fields in meta.

    class ProfileAPI(serializers.Serializer):
        name = serializers.SerializerMethodField()
        age = serializers.SerializerMethodField()
    
        def get_name(self, obj):
            return "name"
    
        def age(self,obj):
            return 78
    
        class Meta:
            fields = ["name", "age"]
    

    In the above case "get_name" is called first and then "get_age".


    changing the order to

    class Meta:
         fields = ["age", "name"]
    

    would execute get_age first.