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