Передайте входные параметры как dict. Затем вы должны использовать SerializerMethodField () для этого:
from rest_framework import serializers
class ExampleSerializer(serializers.Serializer):
key1 = serializers.SerializerMethodField()
key2 = serializers.SerializerMethodField()
key3 = serializers.SerializerMethodField()
key4 = serializers.SerializerMethodField()
def get_key1(self, obj):
# do some calculations, let's say we want to return input1 multiplied by 2
# I'm accessing obj data and if it's empty assigning 0, you can add your own check instead
return obj.get('input1', 0)*2
def get_key2(self, obj):
# same deal, do whatever calculations you want with the input data
return obj.get('input2')
def get_key3(self, obj):
# your logic
return
def get_key4(self, obj):
return
Для каждого поля, объявленного как SerializerMethodField, у вас должен быть соответствующий метод get_field.
Вам решать, как получить ввод params, вы можете сделать это с помощью параметров запроса или данных тела. Вызовите сериализатор, как это на ваш взгляд, например, с параметрами тела:
class ExampleRetrieveApiView (APIView):
def get(self, request):
input_data = {'input1':request.data.get('input1'),
'input2':request.data.get('input2')}
serializer = ExampleSerializer(input_data)
return Response(serializer.data)