【发布时间】:2017-12-26 13:40:13
【问题描述】:
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)
我在这里尝试接受 2 种 json。一次一个 一种使用 QandA 对象更新数据库的方法 其他看起来像 {“数字”:3} 必须提取此数字并返回 3 个随机 QandA 对象
除了“数字”之外的一切都有效。 try 块总是失败,我得到异常说我错过了 QandA 对象的所有字段
Serializer.py 文件是
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')
【问题讨论】:
-
我认为你想查看 request.DATA,而不是 request.body。
-
可能也有助于发布 QandASerializer 的定义。
-
我添加了序列化程序文件。
-
您收到的确切错误消息是什么?
-
{"answer":["此字段为必填项。"],"option_b":["此字段为必填项。"],"option_a":["此字段为必填项。"] ,"question":["This field is required."],"option_c":["This field is required."]} 这是返回的内容
标签: json django python-2.7