我有一个带操作的视图集,该视图集已定义为向用户添加朋友。但是我的网址有问题,请在http://localhost:8000/accounts/users/mercer/add_friend/上发送查询 并收到以下消息: add_friend()获得了意外的关键字参数“用户名”
我的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')
答案 0 :(得分:2)
根据Django Viewsets documentation on marking extra actions for routing:
与常规操作一样,额外的操作可能针对单个对象或整个集合。为了表明这一点,请将detail参数设置为True或False。路由器将相应地配置其URL模式。例如,DefaultRouter会将详细信息操作配置为在其网址格式中包含pk。
正如您声明的detail=True
,是指此操作将应用在CustomUser
对象中,而不是所有用户中。我认为您的帖子网址中已包含此内容,因为您似乎将“ mercer” 作为对象用户名传递。因此,您还必须期望在动作方法中将username
作为参数传递:
@action(detail=True, methods=['post'])
def add_friend(self, request, username=None):
# your code
return Response('ok')