Во-первых, вы можете захотеть использовать существующий метод put и get_object в представлениях и наборах API DRF, поскольку они очень похожи на те, что у вас есть.
Что касается вашего вопроса, то в бэкэнде уже есть всенужно, так что вам нужно сделать следующее:
- Отправить запрос на получение для извлечения объекта пользователя
- Показать значения в форме и позволить пользователю редактировать поля, которые онхочет
- Отослать новые значения, включая старые, которые не были отредактированы в бэкэнд, используя запрос put
- Представление разделяет их, проверяет и обновляет объект пользователя
Это действительно все, что вам нужно, и, как вы можете видеть, в бэкэнде уже есть все, что нужно.
Имейте в виду, однако, что поля пароля не должны редактироваться так же, как остальныеперед сохранением нужно хешироватьОбычной практикой является создание отдельной страницы смены пароля, где вы можете корректно обновлять пароль.Однако, если вы все еще хотите обновить пароль так же, как остальные, то вы можете сделать что-то вроде этого в вашем сериализаторе:
def update(self, instance, validated_data):
password = validated_data.pop('password', None)
instance = super().update(instance, validated_data)
if password:
instance.set_password(password)
return instance
ДЛЯ ЧАСТИЧНОГО ОБНОВЛЕНИЯ
Если вы хотите иметь возможность отправлять только поля, измененные в бэкэнд, используйте метод PATCH HTTTP, который используется для частичных обновлений в терминологии REST.Он уже был реализован в DRF, чтобы разрешить пропуск значений для обязательных полей, поэтому вам не нужно реализовывать его самостоятельно