Невозможно изменить пароль пользователя для модели пользователя Django с помощью ModelViewSet
Я использовал модель пользователя Django, используя ModelViewSet. Когда я делаю запрос на обновление пароля для текущего пользователя, который вошел в систему. Хотя я получаю ответ 200 OK, но пароль так и не меняется на новый, который я изменил.
Я также попробовал сделать запрос от моего пользователя admin, и когда я сделал PUT запрос с паролем, он был изменен на что-то другое, и я вышел из панели администратора django.
Вот мой
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsAuthenticated, IsOwnerOfObject]
authentication_classes = (TokenAuthentication,)
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'password']
extra_kwargs = {
'password' : {
'write_only':True,
'required': True
}
}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user) # create token for the user
return user
urls.py
router = DefaultRouter()
router.register('articles', ArticleViewSet, basename='articles')
router.register('users', UserViewSet, basename = 'users')
urlpatterns = [
path('api/', include(router.urls)),
]
permissions.py
class IsOwnerOfObject(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj == request.user
Вот как я делаю запрос, с маркером авторизации в поле заголовков
Ответ :
Как говорит @BrianDestura, вам нужно вызвать set_password
, чтобы правильно обновить его.
class UserSerializer(serializers.ModelSerializer):
# --> Add this method
def update(self, instance, validated_data):
# We Can change the username?
instance.username = validated_data['username']
instance.set_password(validated_data['password'])
instance.save()
return instance