django-rest操作得到了意外的位置参数



我有一个带操作的视图集,它是为向用户添加朋友而定义的。但我的网址有问题,在上发送帖子查询http://localhost:8000/accounts/users/mercer/add_friend/并得到以下消息:add_friend((得到了一个意外的关键字参数"username">

我的视图集:

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')

根据Django Viewsets关于标记路由的额外操作的文档:

与常规操作一样,额外的操作可能用于单个对象,也可能用于整个集合。若要指示这一点,请将详细信息参数设置为True或False。路由器将相应地配置其URL模式。例如,DefaultRouter将配置细节动作以在其URL模式中包含pk。

当您声明detail=True时,您表示此操作将应用于CustomUser对象,而不是所有用户。我想你已经在你的帖子url中找到了这个,因为你似乎将"mercer">作为你的对象用户名。因此,您还必须期望username作为操作方法中的参数传递:

@action(detail=True, methods=['post'])
def add_friend(self, request, username=None):
# your code
return Response('ok')

最新更新