DRF - добавить пользовательские данные в сериализатор в ответе действия - PullRequest
0 голосов
/ 28 мая 2020

У меня есть настраиваемое действие, которое получает входные данные и должно возвращать список назначенных объектов cidr.

    @action(detail=True, methods=['POST'], name="Assign Subnet from Pool", serializer_class=AssignmentSerializer)
    def assign(self, request, pk=None):
        """Adds a new address within the pool
        """
        pool = self.get_object()

        serializer = AssignmentSerializer(data=request.data)
        if not serializer.is_valid():
            return Response(status=status.HTTP_412_PRECONDITION_FAILED)

        # Computation generating a dictionary with cidr objects (result)

        # Successfully assigned
        serializer.save(assignments=[cidr for cidr in result.values()])

        return Response(serializer.data, status=status.HTTP_201_CREATED)

Мой сериализатор выглядит так

class AssignmentSerializer(serializers.Serializer):
    """This is a serializer for a custom form
    """
    hostname = serializers.CharField(required=False)
    useDefaultDomain = serializers.BooleanField(default=True, help_text='Use pools default domain')
    description = serializers.CharField(required=True)
    assignments = CIDRSerializer(many=True, required=False, help_text='Will not be evaluated on request but contain the assignments in the response')

Однако у меня нет Я придумал, как включать задания в ответ. Сериализатору не нужно сохранять их в базе данных, просто необходимо использовать сериализатор для автоматического создания схемы openapi.

...