KeyError Django rest framework



我正在接收来自应用程序的KeyError。我的模型中有一个字段patientName,但是,提出的问题与patientName有关。有人能帮忙吗?我已经挣扎了好几天了。我不太确定我在这里是否犯了错误。我想使用filter,只接收patientNamepatientNRICpatientAddress,但它失败了。

错误消息:

KeyError at /patient/
'patientName'
Request Method: GET
Request URL:    http://localhost:8000/patient/
Django Version: 3.1.7
Exception Type: KeyError
Exception Value:    
'patientName'
Exception Location: D:Code_EnviromentVisual_Code_Envprojectmyprojectapi_basicviews.py, line 19, in patient_list
Python Executable:  D:pythonpython.exe
Python Version: 3.9.2
Python Path:    
['D:\Code_Enviroment\Visual_Code_Env\project\myproject',
'D:\python\python39.zip',
'D:\python\DLLs',
'D:\python\lib',
'D:\python',
'C:\Users\lenovo\AppData\Roaming\Python\Python39\site-packages',
'D:\python\lib\site-packages']
Server time:    Thu, 22 Apr 2021 08:01:39 +0000

view.py

from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import PatientDetail
from .serializer import PatientSerializer
import sqlite3
# Create your views here.

@api_view(['Get', 'POST'])
# @csrf_exempt  
def patient_list(request):
if request.method == 'GET':    
data = request.data
patientname = data['patientName']
# patientnric = data['patientNRIC']
patientdetails = PatientDetail.objects.filter(patientName = patientname )
# patientdetails = PatientDetail.objects.all()
# serialization
serializer = PatientSerializer(patientdetails, many=True)
# return Json
return Response(serializer.data)

elif request.method == 'POST':
#data = JSONParser().parse(request)
serializer = PatientSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['Get', 'PUT','DELETE'])
@csrf_exempt
def patient_detail(request,patientNRIC):
try:
patientdetails = PatientDetail.objects.get(patientNRIC = patientNRIC)
except PatientDetail.DoesNotExist:
return HttpResponse(status=404)
if request.method == "GET":
# serialization, getting one data only
serializer = PatientSerializer(patientdetails)
# return Json
return JsonResponse(serializer.data)
elif request.method == "PUT":
data = JSONParser().parse(request)
serializer = PatientSerializer(patientdetails, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
patientdetails.delete()
return HttpResponse(status=204)

型号.py

from django.db import models
from django.db import models


class PatientDetail(models.Model):
patientName = models.CharField(max_length=100)
patientNRIC = models.CharField(max_length=100, primary_key=True)
patientAddress = models.CharField(max_length=100)
patientAllergies = models.CharField(max_length=100)
patientMedicationName = models.CharField(max_length=100)
dosage = models.CharField(max_length=100)
sideEffects = models.CharField(max_length=100)
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.patientName

由于错误状态,您没有在请求体中传递任何请求数据,因此触发了KeyError

当您使用POST方法发送数据时,request.data将有数据,因为您使用的是GET方法,所以您的请求体将为空。此外,如果使用GET方法(如<url-endpoint>/?patientName=John(并使用request.query_params['patientName']获取数据,则应使用参数传入数据。

最新更新