我有一个带有动作的视图集,它定义为向用户添加朋友。但是我遇到了 url 问题,在http://localhost:8000/accounts/users/mercer/add_friend/上发送帖子查询 并收到此消息:add_friend() 得到了一个意外的关键字参数“用户名”我的视图集:class UserViewSet(viewsets.ModelViewSet): queryset = CustomUser.objects.all() serializer_class = UserSerializer lookup_field = 'username' http_method_names = ['get', 'patch', 'post'] @action(detail=True, methods=['post']) def add_friend(self, request): return Response('ok')
1 回答

慕仙森
TA贡献1827条经验 获得超8个赞
根据关于标记路由额外操作的 Django Viewsets 文档:
与常规操作一样,额外操作可能针对单个对象或整个集合。要表明这一点,请将 detail 参数设置为 True 或 False。路由器将相应地配置其 URL 模式。例如, DefaultRouter 将配置详细操作以在其 URL 模式中包含 pk。
正如您声明的那样detail=True,您表示此操作将应用于CustomUser对象而不是所有用户。我认为你在你的帖子网址中有这个,因为你似乎将“mercer”作为你的对象用户名传递。因此,您还必须期望username在您的操作方法中作为参数传递:
@action(detail=True, methods=['post'])
def add_friend(self, request, username=None):
# your code
return Response('ok')
添加回答
举报
0/150
提交
取消