Reputation: 95
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
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