Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST返回对象列表时出错_Python_Django_Rest_Django Rest Framework - Fatal编程技术网

Python Django REST返回对象列表时出错

Python Django REST返回对象列表时出错,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,我正在使用Django REST框架为android游戏实现一个游戏服务器。我编写了一个从GenericAPIView派生的类,用于处理特定的Http Post请求。我希望请求返回以前从数据库查询的一些对象的列表 我的代码如下所示: class NewGameView(GenericAPIView): serializer_class=NewGameRequestSerializer def post(self, request, format=None): se

我正在使用Django REST框架为android游戏实现一个游戏服务器。我编写了一个从GenericAPIView派生的类,用于处理特定的Http Post请求。我希望请求返回以前从数据库查询的一些对象的列表

我的代码如下所示:

class NewGameView(GenericAPIView):
    serializer_class=NewGameRequestSerializer
    def post(self, request, format=None):
        serializer = NewGameRequestSerializer(data=request.DATA)
        if serializer.is_valid():
            req=serializer.save()

            mygamedata=...; # request game data objects

            serializer = MyGameDataSerializer(mygamedata, many=True)
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)
当我通过curl访问此视图时,一切都按预期进行。然而,当我使用Django生成的“可浏览api”表单提交时,我收到了
“ListSerializer”对象不可编辑
“模板呈现”过程中出错。如果改为从APIView派生类,则不会发生错误,但Django将不再显示表单(无论出于何种原因)

有人能解释发生了什么事吗


谢谢

您只需返回包含所需数据的词典即可

class NewGameView(GenericAPIView):
serializer_class=NewGameRequestSerializer
def post(self, request, format=None):
    serializer = NewGameRequestSerializer(data=request.DATA)
    if serializer.is_valid():
        req=serializer.save()

        mygamedata=...; # request game data objects

        data = {'game_name': mygame_object.name}
        return Response(data,status=status.HTTP_201_CREATED)

代码中没有
ListSerializer
变量。你能提供更多的代码吗?
ListSerializer
类不是我写的。它是Django REST框架的一部分。My
MyGameDataSerializer
源自
序列化程序。ModelSerializer
。我相信传递many=True会自动使它以某种方式使用此ListSerializer。但是我不确定确切的内部结构(我对Django REST相当陌生),我没有使用ModelViewSet类,因为我的API接口与数据库结构没有真正的1:1对应关系。例如,我的NewGameRequest类与任何模型都不对应。尽管如此,我还是尝试了您所说的,并且在将url模式更改为:
url(r'^new'u game/',views.NewGameView.as'u view({'post':'post'}))
之后,它显示了与以前完全相同的问题。@Dtag所以您没有尝试用post创建新的数据库条目?将您的url更改为
url(r'^new_game/',views.NewGameView.as_view())
这一行出现错误serializer=MyGameDataSerializer(mygamedata,many=True),如果删除many=True应该可以解决问题,您也可以返回一个包含所有数据的字典问题是可浏览的api无法呈现响应,因此您返回的id为data={'name':'GameData'}因为你不会得到错误的回答,我会更新我的答案,让你明白我的意思