Django REST APIView POST 请求中的 MultiValueDictKeyError
MultiValueDictKeyError in Django REST APIView POST request
我正在尝试为游戏 API 编写一个 POST 请求,并且正在传递来自 GET 请求的一些数据和一些通过此 POST 请求的数据。但是,我不断收到以下错误:
MultiValueDictKeyError 'gameround'
我做错了什么?
def post(self, request, *args, **kwargs):
if not isinstance(request.user, CustomUser):
current_user_id = 1
else:
current_user_id = request.user.pk
gameround = request.GET['gameround']
random_resource = request.GET['resource']
created = datetime.now()
score = 0
origin = ''
name = request.POST['name']
language = request.POST['language']
user_input_tag = Tag.objects.create(name=name, language=language)
tag_serializer = TagSerializer(user_input_tag)
if Tagging.objects.all().filter(tag=user_input_tag).exists():
# if tagging like this exists, save tagging anyway and leave tag unchanged
score += 5
user_input_tagging = Tagging.objects.create(user_id=current_user_id,
gameround=gameround,
resource=random_resource,
tag=user_input_tag,
created=created,
score=score,
origin=origin)
tagging_serializer = TaggingSerializer(user_input_tagging)
return Response({'tag and ': tag_serializer.data}, {'tagging': tagging_serializer.data})
elif not Tagging.objects.all().filter(tag=user_input_tag).exists():
# save tagging otherwise and del tag?
user_input_tagging = Tagging.objects.create(user_id=current_user_id,
gameround=gameround,
resource=random_resource,
tag=user_input_tag,
created=created,
score=score,
origin=origin)
user_input_tagging.save()
tagging_serializer = TaggingSerializer(user_input_tagging)
return Response({'tagging only': tagging_serializer.data})
您的 GET
中没有密钥 gameround
。您可以获得游戏数据作为
gameround = request.GET.get('gameround')
如果未给出默认值,则默认为 None
。
或者您可以将 default
值设置为
gameround = request.GET.get('gameround', '')
我正在尝试为游戏 API 编写一个 POST 请求,并且正在传递来自 GET 请求的一些数据和一些通过此 POST 请求的数据。但是,我不断收到以下错误:
MultiValueDictKeyError 'gameround'
我做错了什么?
def post(self, request, *args, **kwargs):
if not isinstance(request.user, CustomUser):
current_user_id = 1
else:
current_user_id = request.user.pk
gameround = request.GET['gameround']
random_resource = request.GET['resource']
created = datetime.now()
score = 0
origin = ''
name = request.POST['name']
language = request.POST['language']
user_input_tag = Tag.objects.create(name=name, language=language)
tag_serializer = TagSerializer(user_input_tag)
if Tagging.objects.all().filter(tag=user_input_tag).exists():
# if tagging like this exists, save tagging anyway and leave tag unchanged
score += 5
user_input_tagging = Tagging.objects.create(user_id=current_user_id,
gameround=gameround,
resource=random_resource,
tag=user_input_tag,
created=created,
score=score,
origin=origin)
tagging_serializer = TaggingSerializer(user_input_tagging)
return Response({'tag and ': tag_serializer.data}, {'tagging': tagging_serializer.data})
elif not Tagging.objects.all().filter(tag=user_input_tag).exists():
# save tagging otherwise and del tag?
user_input_tagging = Tagging.objects.create(user_id=current_user_id,
gameround=gameround,
resource=random_resource,
tag=user_input_tag,
created=created,
score=score,
origin=origin)
user_input_tagging.save()
tagging_serializer = TaggingSerializer(user_input_tagging)
return Response({'tagging only': tagging_serializer.data})
您的 GET
中没有密钥 gameround
。您可以获得游戏数据作为
gameround = request.GET.get('gameround')
如果未给出默认值,则默认为 None
。
或者您可以将 default
值设置为
gameround = request.GET.get('gameround', '')