DRF возвращает JsonResponse из другой функции

Я пытаюсь вернуть JsonResponse из другой функции, но получаю следующую ошибку от DRF:

AssertionError: Ожидалось, что в представлении будет возвращено Response, HttpResponse или HttpStreamingResponse будет возвращено из представления, но получено <class 'NoneType'>

Вот мой код

class SignedURL(GenericViewSet):
    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

    def create(self, request, *args, **kwargs):

        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        function1(request)
        function2(request)
        function3(request) <-- must quit here if this function has an error and return the JSONresponse of this function.
        function4(request)


def function1(request):

        return JsonResponse(
            {
                "message": "Pass",
            },
            status=status.HTTP_400_BAD_REQUEST,

Как я могу вернуть JsonResponse из другой функции, не записывая return JsonResponse в самой def create?

Дальнейшее разъяснение:

У меня есть десять разных functions с десятью разными JsonResponse.

т.е. function2, function3...function10. Если, например, function 4 потерпит неудачу, я хотел бы вернуть JsonResponse сразу из этой функции и не продолжать работу с другими функциями после function 4 в рамках вызова create.

Ваш function1 в настоящее время return получает только JsonResponse без какой-либо проверки ошибок. Это приведет к остановке скрипта и отказу от дальнейшего выполнения кода.

Он не будет переходить к другим вызовам функций внутри метода create.

Ваш код в его текущем состоянии должен иметь эффект, который вы ищете. Вы импортировали JsonResponse?

В целом, это звучит немного неортодоксально, что вы пытаетесь реализовать. В любом случае, вы можете перехватить ответ всех функций и вернуть его из метода create.

Но в любом случае, вам нужна некоторая обработка ошибок, либо внутри вашей функции (скорее всего, поскольку вы хотите вернуть JSONResponse), либо в методе create (например, используя try/except), что, кажется, не близко к тому, чего вы хотите достичь, поскольку у вас не будет ничего возвращаться из каждой функции, которая не работает (если только вы не обрабатываете исключения в КАЖДОЙ функции)

Так что может быть что-то вроде:

class SignedURL(GenericViewSet):
    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

    def create(self, request, *args, **kwargs):

        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        result1, is_success1 = function1(request)
        if is_success1 is False:
            # Quit here if this function has an error and return the JSONresponse of this function
            return result1

        # similar checks below
        result2, is_success2 = function2(request)
        result3, is_success3 = function3(request)
        ...

И

def function1(request):
    try:
        return 1 / 0, True
    except:
        return JsonResponse(
            {
                "message": "ERROR HAPPENED!"
            },
            status=status.HTTP_400_BAD_REQUEST
        ), False
Вернуться на верх