我正在尝试实现一个RESTful Web服务。 一切都进行得很顺利,直到我尝试从POST请求反序列化包含对象的列表时出现问题。我的代码如下:
#serializers.py
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model=test_result
fields=('id', 'label')
#views.py
class results(APIView):
"""
Post the results for a test set.
"""
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, pk, format=None):
ser=ResultSerializer(data=request.DATA)
for i in range(len(ser.data)):
if ser.data[i].is_valid():
entry=test_result(user=User.objects.get(username=request.user.username), test_id=Detail.objects.get(test_id=pk), id=Article.objects.get(id=ser.data[i]['id']), label=ser.data[i]['label'])
entry.save() #I use a test_result table in my database to save things
return Response(ser.data[i], status=status.HTTP_201_CREATED)
return Response(ser.errors, status=status.HTTP_400_BAD_REQUEST)
The curl command i use to test is:
curl -v -H "Accept: application/json" -H "Content-type: application/json" --user plao:1234 -X POST -d '[{"id":23401853, "label":1504}, {"id":23401853, "label":1505}]' http://127.0.0.1:8000/tests/uploadResults/1/
我已经测试了我的代码(不包括索引),使用简单的post请求是可以正常工作的。但是当我尝试提交一个列表时,就无法正常工作。
然而,在尝试在shell中运行代码(python manage.py shell
)后,我注意到框架代码中有一个TODO:
# TODO: error data when deserializing lists
代码有问题吗?有什么建议可以提供吗?在最终版本中,用户将发布像以下这样的字符串,但我会逐步实现它:
{"documents": [{"id":[Label1,...,LabelN]},....,{"id":[Label1,..,LabelM]}]}
如果我能掌握列表,我就能处理那种类型的JSON。