我是python REST API的新手,因此面临一些特殊问题。我希望当我以pathlabid(主键)输入输入时,我希望将该键指定的相应数据作为输出。当我运行以下代码时,我只获得与数据库中第一行表对应的数据,即使我输入的id属于某个其他行。 这是VIEWS.PY
class pathlabAPI(View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
# dont worry about the CSRF here
return super(pathlabAPI, self).dispatch(*args, **kwargs)
def post(self, request):
post_data = json.loads(request.body)
Pathlabid = post_data.get('Pathlabid') or ''
lablist = []
labdict = {}
lab = pathlab()
labs = lab.apply_filter(Pathlabid = Pathlabid)
if Pathlabid :
for p in labs:
labdict["Pathlabid"] = p.Pathlabid
labdict["name"] = p.Name
labdict["email_id"] = p.Emailid
labdict["contact_no"] = p.BasicContact
labdict["alternate_contact_no"] = p.AlternateContact
labdict["bank_account_number"] = p.Accountnumber
labdict["ifsccode"] = p.IFSCcode
labdict["country"] = p.Country
labdict["homepickup"] = p.Homepickup
lablist.append(labdict)
return HttpResponse(json.dumps(lablist))
else:
for p in labs:
labdict["bank_account_number"] = p.Accountnumber
lablist.append(labdict)
return HttpResponse(json.dumps(lablist))
答案 0 :(得分:0)
您将在for循环中返回响应,以便第1个条目中的循环中断
import json
some_list = []
for i in data:
some_list.append({"key": "value"})
return HttpResponse(json.dumps({"some_list": some_list}), content_type="application/json")
尝试以上示例来解决您的问题
答案 1 :(得分:0)
整体方法和代码存在许多问题,但要解决您所描述的问题,但作为第一个修复,我同意另一个答案:您需要将return
语句从循环。现在,只要您循环一次循环,就会return
列出您的列表,这就是为什么您总是会得到一个包含一个元素的列表。以下是对此的修复(您需要在代码顶部添加from django.http import JsonResponse
):
if Pathlabid:
for p in labs:
labdict["Pathlabid"] = p.Pathlabid
labdict["name"] = p.Name
labdict["email_id"] = p.Emailid
labdict["contact_no"] = p.BasicContact
labdict["alternate_contact_no"] = p.AlternateContact
labdict["bank_account_number"] = p.Accountnumber
labdict["ifsccode"] = p.IFSCcode
labdict["country"] = p.Country
labdict["homepickup"] = p.Homepickup
lablist.append(labdict)
else:
for p in labs:
labdict["bank_account_number"] = p.Accountnumber
lablist.append(labdict)
return JsonResponse(json.dumps(lablist))
正如评论中所建议的那样,使用Django Rest Framework或类似的软件包将是一种改进。作为一般规则,在Django或其他ORM中,您希望避免循环遍历此类查询集并调整每个元素。为什么不序列化查询集本身并在模板或其他消费者中执行此循环中的逻辑?