Django DRF Response返回的数据中带有filter对象,返回数据重复问题

Django DRF Response返回的数据中带有filter对象,返回数据重复问题

问题描述

开发使用了django的DRF框架,view使用的APIView, 返回Response数据中存在filter对象

问题出现的环境背景及自己尝试过哪些方法

项目需要,数据从数据库取出来后,使用filter过滤,然后直接把返回的结果没做list转化处理,返回前端,发现数据都是重复的
1,非jdango问题,因为我试着换成django原生的view,用jsonResponse会提示
Object of type 'filter' is not JSON serializable, 如果使用HttpResponse,返回显示的是对象地址
2,应该也不是filter问题,因为我试着打印每个filter,是不同的对象
3,也不是生成器问题,我试着换成生成器表达式的结果,返回没问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
class Index(APIView):

def get(self, request):

data = [{"task_id": 1}, {"task_id": 2}, {"task_id": 3}]

task_user = [{"task": 2, 'user': 23}, {"task": 3, 'user': 25}]

start = 1

for i in data:

# list转化之后,返回数据正确,否则,返回的所有数据的age值都一模一样

# i['age'] = list(filter(lambda x: x.get('task') == i.get('task_id'), task_user))

i['age'] = filter(lambda x: x.get('task') == i.get('task_id'), task_user)

# i['age'] = (x for x in range(start+10))

start += 10

return Response(data=data)

你期待的结果是什么?实际看到的错误信息又是什么?

正确的结果:
[

{

"task_id": 1,

"age": []

},

{

"task_id": 2,

"age": [

{

"task": 2,

"user": 23

}

]

},

{

"task_id": 3,

"age": [

{

"task": 3,

"user": 25

}

]

}

]
如果不用list转化,展示的结果:

{

"task_id": 1,

"age": [

{

"task": 3,

"user": 25

}

]

},

{

"task_id": 2,

"age": [

{

"task": 3,

"user": 25

}

]

},

{

"task_id": 3,

"age": [

{

"task": 3,

"user": 25

}

]

}

]


回答:

return Response()里应该是一个dict而不是list。
改成这样试试
def get(self, request):

data = [{"task_id": 1}, {"task_id": 2}, {"task_id": 3}]

task_user = [{"task": 2, 'user': 23}, {"task": 3, 'user': 25}]

start = 1

data_list = []

for i in data:

# list转化之后,返回数据正确,否则,返回的所有数据的age值都一模一样

# i['age'] = list(filter(lambda x: x.get('task') == i.get('task_id'), task_user))

i['age'] = filter(lambda x: x.get('task') == i.get('task_id'), task_user)

data_list.append(i)

# i['age'] = (x for x in range(start+10))

start += 10

results_dict = {"results": data_list}

return Response(results_dict)

以上是 Django DRF Response返回的数据中带有filter对象,返回数据重复问题 的全部内容, 来源链接: utcz.com/a/162086.html

回到顶部