首页 文章

django休息动作得到意想不到的位置论证

提问于
浏览
0

我有一个带有动作的视图集,它已定义为向用户添加好友 . 但是我遇到了url的问题,在http://localhost:8000/accounts/users/mercer/add_friend/上发送了帖子查询并得到了这样的消息: add_friend() got an unexpected keyword argument 'username'

我的ViewSet:

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 回答

  • 2

    根据Django Viewsets documentation on marking extra actions for routing

    与常规操作一样,可以针对单个对象或整个集合执行额外操作 . 要指明这一点,请将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')
    

相关问题