Вычисление полей только для чтения сериализаторов
Вот пример:
# 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)
Я хотел бы вычислить y
на основе x
с помощью "сложной" бизнес-логики y = const * x
и сохранить результат в поле json.
Вопрос: Где я должен разместить эту бизнес-логику?
- перед инициализацией сериализатора, перехватывая неизменяемые
request.data
- внутри сериализатора
validate()
илиvalidate_y()
метода. - используя
get_y()
изSerializerMethodField
. - внутри
create_mymodel()
сервиса.