这是我的@detail_route
@detail_route()
def children(self, request):
parent = self.get_object()
children = parent.parent_children.all()
serializer = ChildSerializer(children)
return Response(serializer.data)
如果我不包括PK或某些** kwargs,我会收到错误:
children() got an unexpected keyword argument 'pk'
如果我在子参数中添加PK或** kwargs,我会收到错误:
'QuerySet' object has no attribute 'id'
如果我将PK添加到参数并且我将PK传递给get_object(),那么我会得到404错误,即使它在那里。
我迷失了为什么这些都会产生这样的不同错误。我的期望是,如果我去/api/parent/7/children
我会获得该父母的孩子名单
答案 0 :(得分:0)
从Django REST Framework 2.4开始,在为数据列表(如查询集)初始化序列化程序时,应该传递many=True
。
为了解决您遇到的问题,您应该将pk
和format
传递到路线中,并在many=True
上设置ChildSerializer
。
@detail_route()
def children(self, request, pk, format=None):
parent = self.get_object()
children = parent.parent_children.all()
serializer = ChildSerializer(children, many=True)
return Response(serializer.data)
这将告诉序列化程序将传入的数据解释为列表,而不是单个对象。