2

Say you have a quantity field in your order model.

You have get_quantity method which you want to use for read (serializing). At the same time, you want to use quantity field to create or update.

quantity = serializers.IntegerField(source="get_quantity", required=False)

fails to use quantity when writing.

How to do something like

read_source="get_quantity"
write_source="quantity"
eugene
  • 39,839
  • 68
  • 255
  • 489

1 Answers1

1

Method - 1: override the to_representation(...) method

class FooSerializer(serializers.Serializer):
    quantity = serializers.IntegerField(required=False) # do not set `source` parameter

    def to_representation(self, instance):
        rep = super().to_representation(instance)
        rep["quantity"] = instance.get_quantity()
        return rep

Method - 2: Use two different serializer

class FooReadSerializer(serializers.Serializer):
    quantity = serializers.IntegerField(required=False, source="get_quantity")


class FooWriteSerializer(serializers.Serializer):
    quantity = serializers.IntegerField(required=False)
JPG
  • 82,442
  • 19
  • 127
  • 206