Calculating serializers read only fields

Here is an example:

# models.py
class MyModel(models.Model):
    ...
    metadata = models.JSONField()

# serializers.py
class MetadataSerializer(serializers.Serializer):
    x = serializers.IntegerField()
    y = serializers.IntegerField(read_only=True)

# views.py
class MyAPIView(APIView):
    def post(self, request):
        serializer = MetadataSerializer(data=request.data)
        serializer.is_valid()
        create_mymodel(metadata=serializer.validated_data)
        return Response(status=201)

I would like to calculate y based on x using "complex" business logic y = const * x and save result to json field.

Q: Where should i place this business logic?

  • before serializer init, intercepting immutable request.data
  • inside serializer validate() or validate_y() method.
  • using get_y() of SerializerMethodField.
  • inside create_mymodel() service.
Back to Top