错误信息
AssertionError: Expected view UserListUpdate to be called with a URL keyword a
rgument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on
the view correctly.
代码
# views.py
class UserUpdate(UpdateAPIView):
"""
用户更改密码
"""
queryset = User.objects.all()
serializer_class = UserUpdateSerializer
permission_classes = (IsAuthenticated,)
# serializers.py
class UserUpdateSerializer(serializers.ModelSerializer):
class Meta:
....
# 更新
def update(self, instance, validated_data):
instance.username = validated_data.get('username')
instance.set_password(validated_data.get('password'))
instance.save()
return validated_data
- 这次的需求是在用户登录的情况下,能够更改本人的密码,但是当发送put请求后会抛出异常,主要意思大概就是缺少主键(pk)
解决思路
- 我们需要在视图中获取当前登录用户信息
- 然后传入序列化函数中
class UserUpdate(UpdateAPIView):
"""
用户更改密码
"""
queryset = User.objects.all()
serializer_class = UserUpdateSerializer
permission_classes = (IsAuthenticated,)
# 获取当前已经登录用户信息 传入
def get_object(self):
return self.request.user