Python django rest操作获得意外的位置参数
我有一个带有action的viewset,它已定义用于向用户添加朋友。但我在url上遇到了问题,请发送post查询 并收到以下消息:add\u friend()收到一个意外的关键字参数“username” 我的视图集:Python django rest操作获得意外的位置参数,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个带有action的viewset,它已定义用于向用户添加朋友。但我在url上遇到了问题,请发送post查询 并收到以下消息:add\u friend()收到一个意外的关键字参数“username” 我的视图集: class UserViewSet(viewsets.ModelViewSet): queryset = CustomUser.objects.all() serializer_class = UserSerializer lookup_field = '
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')
根据:
与常规操作一样,额外操作可能针对单个对象或整个集合。要指出这一点,请将detail参数设置为True或False。路由器将相应地配置其URL模式。e、 例如,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')
根据:
与常规操作一样,额外操作可能针对单个对象或整个集合。要指出这一点,请将detail参数设置为True或False。路由器将相应地配置其URL模式。e、 例如,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')
谢谢你的回答。我前一段时间试图这么做,但遇到了另一个错误:“\uuuu init\uuuu()接受1个位置参数,但给出了2个”。你确定你也尝试过这样做吗?这个错误发生在哪里?哦,另一个问题是Response()。我从这里导入了它:“从请求导入响应”而不是“从rest\u framework.Response导入响应”。谢谢,你解决了我的问题谢谢你的回答。我前一段时间试图这么做,但遇到了另一个错误:“\uuuu init\uuuu()接受1个位置参数,但给出了2个”。你确定你也尝试过这样做吗?这个错误发生在哪里?哦,另一个问题是Response()。我从这里导入了它:“从请求导入响应”而不是“从rest\u framework.Response导入响应”。谢谢,你解决了我的问题