я должен использовать функцию is_valid () для проверки моих пользовательских данных в функции put () в drf? потому что когда я его использую, is_valid.errors говорит, что модель с этим именем пользователя и адресом электронной почты уже существует! Я не могу понять смысл ошибок, потому что я думаю, что должно быть что-то сохранено, прежде чем я хочу обновить
serializers.py
class UserCreateSerializers(ModelSerializer):
class Meta:
model = User
fields = ('name','email','family',"username","password","profile_pic")
def update(self, instance, validated_data):
print("from update try")
#more dry
for i in validated_data.keys():
if hasattr(instance,str(i)) and str(i) !="password":
setattr(instance,str(i),validated_data.get(str(i)))
elif hasattr(instance,str(i)) and str(i) =="password":
instance.set_password(validated_data.get('password'))
setattr(instance,"username",validated_data.get('new_username'))
instance.save()
views.py
def put(self,request):
username = request.data['username']
user = User.objects.get(username = username)
serialized = UserCreateSerializers(data = request.data)
if serialized.is_valid():
serialized.update(user,serialized.validated_data)
return Response(data ={"status":"api_user_update_ok"} , status = status.HTTP_201_CREATED)
else:
print(serialized.errors)
return Response(data = {"status":"api_user_update_failed","error":serialized.errors.get('email')[0]},status = status.HTTP_400_BAD_REQUEST)
данные клиента с методом put:
name:user
family:useri
username:user2
password:1234
new_username:user22
email:user@gmail.com
ошибка:
{'email': [ErrorDetail (строка = 'пользователь с таким адресом электронной почты уже существует.', Code = 'unique')], 'username': [ErrorDetail (string = 'пользователь с таким именем пользователя уже существует. ', code =' unique ')]} Неверный запрос: / api / v0 / registration / signup
и ответ сервера:
{
"status": "api_user_update_failed",
"error": "user with this email already exists."
}
спасибо за вашу помощь.