Django-在同一post方法中接收多种json对象

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

这里我尝试接受两种json。一次一个 一个用QandA对象更新数据库的程序 其他看起来像 {“数字”:3} 必须提取此数字,并且必须返回3个随机QandA对象

除了“数字”以外的所有东西都能工作。 try块总是失败,我得到一个异常,说我错过了QandA对象的所有字段

Serializer.py文件不可用

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对象,因此我删除了答案中的该部分。