Я использую updateapiview для обновления информации о пользователе. Это мой взгляд
class UserUpdateView(generics.UpdateAPIView):
serializer_class = UserUpdateSerializer
def get_queryset(self):
print(self.kwargs['pk'])
return User.objects.filter(pk=self.kwargs['pk'])
def partial_update(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, partial=True)
if self.get_object() != request.user:
return Response({'error': 'permission denied'}, status=status.HTTP_400_BAD_REQUEST)
print(request.data['password'])
request.data['password'] = make_password(request.data['password'])
instance = super(UserUpdateView, self).partial_update(request, *args, **kwargs)
return instance
Это мой сериализатор
class UserUpdateSerializer(serializers.ModelSerializer):
email = serializers.EmailField(required=True)
def validate_username(self, username):
if User.objects.filter(username=username):
raise serializers.ValidationError('Username already exists!!')
return username
def validate_email(self, email):
if User.objects.filter(email=email):
raise serializers.ValidationError('Email already exists!!')
return email
class Meta:
model = User
fields = ('pk', 'username', 'password', 'email')
read_only_fields = ('pk',)
Я получаю данные обновлены и возвращены успешно. Но я хочу добавить какое-то поле, например, сообщение с содержимым, «успешно обновленным» при успешном обновлении профиля пользователя. Я искал, есть ли способ сделать это, но не могу найти подходящий способ сделать это (как метод get_context_data в django). Итак, есть ли способ выполнить вышеуказанную задачу?
Вопрос 2:
Как предотвратить самостоятельного пользователя (например, если у него есть электронная почта sample@gmail.com, и если пользователь нажимает кнопку udpate с тем же адресом электронной почты, это не должно вызывать ошибку, что имя пользователя уже существует, я думаю, это можно сделать с помощью self.instance (но не уверен, как на самом деле это реализовать).
Спасибо!