Dtag
Dtag

Reputation: 95

Django REST error returning a list of objects

I am using the Django REST framework in order to implement a game server for an android game. I have written a class, that is derived from GenericAPIView to handle a specific Http Post request. I want the request to return a list of some objects, that were previously queried from the database.

My code looks like this:

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)

When I access this view via curl, everything works as expected. However, when I submit using the Django generated "browsable api" form, I am receiving a 'ListSerializer' object is not iterable error during "template rendering". If I derive my class from APIView instead, the error does not occur, but Django will not display the forms anymore (for whatever reason).

Can anyone explain what is going on?

Thanks

Upvotes: 2

Views: 2325

Answers (1)

Pieter Hamman
Pieter Hamman

Reputation: 1612

You can just return a dictionary with the data you need.

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)

Upvotes: 3

Related Questions