循环中断并给出错误,因为"str"对象没有属性"get"



我试图在执行第一行后循环JSON,它开始读取字典内的keys,所以我得到一个错误,因为" str "对象没有属性" get "

我只想得到下一个循环,但是它在字典内循环。

当我第一次打印request.data时,它打印的字典是{'AuditorId': 130, 'Agents': '', 'Supervisor': '', 'TicketId': '5354543', 'QId': 1, 'Answer': '2', 'SID': 7734, 'Comments': ''}

执行后,它应该进入下一个循环,但它直接进入每个循环n打印keys当我在控制台中打印request.data时,它得到它作为ran--- AuditorId ran--- AuditorId ran--- AuditorId ran--- AuditorId ran--- AuditorId ran--- AuditorId导致我的错误

负载没有问题。但是哪里出了问题,我从昨天就开始尝试了,希望能得到任何帮助。

有效载荷:

[{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":42,"Answer":"2","SID":"0","Comments":""}, 

{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":43,"Answer":"2","SID":"0","Comments":""},  
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":44,"Answer":"2","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":45,"Answer":"2","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":46,"Answer":"3","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":47,"Answer":"5","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":48,"Answer":"5","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":49,"Answer":"2","SID":"0","Comments":""}, 
{"AuditorId":130,"Agents":"","Supervisor":"","TicketId":"325423432","QId":50,"Answer":"5","SID":"0","Comments":""}]

views.py:

cursor = connection.cursor()
for ran in request.data:
print('request.data--', ran)
auditorid =ran.get('AuditorId')
print('SaveUserResponse auditorid---', auditorid)
ticketid = ran.get('TicketId')
qid = ran.get('QId')
answer = ran.get('Answer')
# sid =  ran.get('SID')
sid = '0'
print('sid--', sid)

qid = i['QId']
print('qid--', qid)
answer = i['Answer']
print('answer--', answer)


cursor.execute('EXEC [dbo].[sp_SaveAuditResponse] @auditorid=%s,@ticketid=%s,@qid=%s,@answer=%s,@sid=%s',
(auditorid,ticketid,qid,answer, sid))
print(qid)
result_st = cursor.fetchall()
print('sp_SaveAuditResponse', result_st)
for row in result_st:
print('sp_SaveAuditResponse', row)
return Response(row[0])

创建API有效负载的前端:

this.service.SaveUserResponse(this.InputRequestList ).subscribe((response: Number) => {
newsid = response;
this.set = newsid;
this.InputRequestList = [];
var otcome: string = '';

let supervisor = localStorage.getItem('PlusSupervisor');

let Agent = localStorage.getItem('PlusAgent');

let taskComments = localStorage.getItem('PlusText4')

if (newsid != 0) {
const inputRequest: UserResponse = {
AuditorId: Number(localStorage.getItem("PlususerId")),
Agents: (this.selectedAgent == undefined) ? '' : Agent,
Supervisor: (this.selectedSupervisor == undefined) ? '' : supervisor,


TicketId: this.ticket,
QId: 0,
Answer: this.selectedValue[i],
SID: this.set,
Comments: taskComments,
}

这里是列表中的有效负载——1这是浏览器有效载荷——2,它一个接一个地出现在字典中

我认为您需要创建序列化器来正确接收这些数据。

class AuditorSerializer(serializers.Serializer):
AuditorId = serializers.IntegerField()
Agents = serializers.CharField(allow_blank = True)
Supervisor = serializers.CharField(allow_blank = True)
TicketId = serializers.CharField(allow_blank = True)
QId = serializers.IntegerField()
Answer = serializers.CharField(allow_blank = True)
SID = serializers.CharField(allow_blank = True)
Comments = serializers.CharField(allow_blank = True)

在视图

serializer = AuditorSerializer(data = request.data, many = True)
if serializer.is_valid():
input_data = serializer.validated_data
if isinstance(input_data, list):
for ran in input_data:
process_data(ran)
else:
process_data(input_data)
else:
print(serializer.errors)
return Response(status = status.HTTP_400_BAD_REQUEST)

您可以声明process_data函数并传递ran数据,在那里输入原始代码。

最新更新