猿问

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

我有一个带有动作的视图集,它定义为向用户添加朋友。但是我遇到了 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')


莫回无
浏览 133回答 1
1回答

慕仙森

根据关于标记路由额外操作的 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')
随时随地看视频慕课网APP

相关分类

Python
我要回答