使用@detail_route会一直返回404,没有ID或关键字参数

时间:2014-09-24 13:20:28

标签: django rest django-rest-framework

这是我的@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我会获得该父母的孩子名单

1 个答案:

答案 0 :(得分:0)

从Django REST Framework 2.4开始,在为数据列表(如查询集)初始化序列化程序时,应该传递many=True

为了解决您遇到的问题,您应该将pkformat传递到路线中,并在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)

这将告诉序列化程序将传入的数据解释为列表,而不是单个对象。