Объект типа Response не является JSON-сериализуемым в rest framework

Я пытаюсь вызвать ответ одного метода в другой метод в Django rest framework.

views.py:

@api_view(['GET','POST'])
def GetCurrentRunningActivityForAudit(request, UserID):

    if request.method == 'GET':
        
   
        print("current running activity--userid--", UserID)
        cursor = connection.cursor()
        cursor.execute('EXEC [dbo].[sp_GetCurrentRunningActivityAudit] @UserId=%s',(UserID,))
        result_set = cursor.fetchall()
       
        data = []
        for row in result_set:
            TaskId=row[0]           
            TaskName = row[1]
            Source = row[2]
            SID = row[3]
            type = row[4]
           
            data.append({
                    "TaskId": TaskId, "TaskName":TaskName,"Source":Source,
                    "SID":SID, "type":type, "IsActive":GetCurrentSubTaskSTatus(TaskId)})
        

            return Response(data[0])   
        return Response(data)    
<
def GetCurrentSubTaskSTatus(taskid):

    cursor = connection.cursor()
    cursor.execute('EXEC [dbo].[USP_GetCurrentTaskStatus] @taskid=%s',(taskid,))
    result_set = cursor.fetchall()
    for row in result_set:
        IsActive =row[0]
    return Response({"IsActive":IsActive})
     
Я передаю этот ответ метода в вышеупомянутый ответ метода, т.е.,. GetCurrentRunningActivityForAudit, но он отображается как Object of type Response is not JSON serializable

Вы получаете эту ошибку, потому что передаете классу Response словарь, содержащий Response в качестве значения по ключу IsActive.

Помните, что Response clas не возвращает JSON, а возвращает полный объект Response, и он ожидает словарь в качестве входа, поэтому вы получаете ошибку.

An object of type Response is not JSON serializable

Если вы хотите решить эту проблему, вы можете сделать это, удалив Removing Response из этой строки

 return Response({"IsActive":IsActive})

вам нужно написать его как можно проще


 return {"IsActive":IsActive}

А представление Response позаботится о вложенном словаре, так что вам не придется беспокоиться об этом.

Поправки здесь

def GetCurrentSubTaskSTatus(taskid):

    cursor = connection.cursor()
    cursor.execute('EXEC [dbo].[USP_GetCurrentTaskStatus] @taskid=%s',(taskid,))
    result_set = cursor.fetchall()
    for row in result_set:
        IsActive =row[0]
    return {"IsActive":IsActive}
Вернуться на верх