为了账号安全,请及时绑定邮箱和手机立即绑定

django rest action 得到了意想不到的位置参数

django rest action 得到了意想不到的位置参数

莫回无 2021-09-11 17:39:37
我有一个带有动作的视图集,它定义为向用户添加朋友。但是我遇到了 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')


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号