Django-在同一post方法中接收多种json对象
这里我尝试接受两种json。一次一个 一个用QandA对象更新数据库的程序 其他看起来像 {“数字”:3} 必须提取此数字,并且必须返回3个随机QandA对象 除了“数字”以外的所有东西都能工作。 try块总是失败,我得到一个异常,说我错过了QandA对象的所有字段 Serializer.py文件不可用Django-在同一post方法中接收多种json对象,json,django,python-2.7,Json,Django,Python 2.7,这里我尝试接受两种json。一次一个 一个用QandA对象更新数据库的程序 其他看起来像 {“数字”:3} 必须提取此数字,并且必须返回3个随机QandA对象 除了“数字”以外的所有东西都能工作。 try块总是失败,我得到一个异常,说我错过了QandA对象的所有字段 Serializer.py文件不可用 from rest_framework.views import APIView from rest_framework.response import Response from rest_f
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import QandA
from .serializers import QandASerializer
import json
import random
from itertools import count
class QandAlist(APIView):
_ids = count(0)
def __init__(self):
self.id = next(self._ids)
def get(self, request):
questions = QandA.objects.all()
serializer = QandASerializer(questions, many=True)
return Response(serializer.data)
def post(self, request):
serializer = QandASerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
try:
n = json.loads(request.body)
return Response(n)
except:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
questions = QandA.objects.order_by('?')[:n]
serializer = QandASerializer(questions, many=True)
return Response(serializer.data)
所以,有几件事 首先,您的
QandASerializer
没有一个number
字段,这是您试图发布的字段。它还具有序列化程序有效所需的一组字段
如果接收到包含“数字”的POST数据,则不能使用序列化程序
from rest_framework import serializers
from .models import QandA
class QandASerializer(serializers.ModelSerializer):
class Meta:
model = QandA
fields = ('question', 'answer', 'option_a', 'option_b', 'option_c')
您可能需要添加额外的检查,以确保
number
实际上是一个数字
首先,您的QandASerializer
没有一个number
字段,这是您试图发布的字段。它还具有序列化程序有效所需的一组字段
如果接收到包含“数字”的POST数据,则不能使用序列化程序
from rest_framework import serializers
from .models import QandA
class QandASerializer(serializers.ModelSerializer):
class Meta:
model = QandA
fields = ('question', 'answer', 'option_a', 'option_b', 'option_c')
您可能需要添加额外的检查,以确保
number
实际上是一个数字。我想您需要查看的是request.DATA,而不是request.body。发布QandSerializer的定义可能也有帮助。我添加了序列化程序文件。您收到的确切错误消息是什么?{“答案”:[“此字段是必需的。”],“选项b”:[“此字段是必需的。”],“选项a”:[“此字段是必需的。”],“问题”:[“此字段是必需的。”],“选项c”:[“此字段是必需的。”]}这是返回的内容我认为您希望查看的是request.DATA,而不是request.body。发布QandSerializer的定义可能也会有所帮助。我添加了序列化程序文件。您收到的确切错误消息是什么?{“answer”:[“this field is required.”、“option_b”:[“this field is required.”、“option_a”:[“this field is required.”、“option_a”:[“this field is required.”、“问题“:[“此字段是必需的。”],“选项c:[“此字段是必需的。”]}这是返回的内容。您不想使用编号创建QandA对象,因此我删除了答案中的该部分。意识到您不想使用编号创建QandA对象,因此我删除了答案中的该部分。