Django Rest Framework: методы validate_username и update не вызываются во время запроса PUTPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Django Rest Framework: методы validate_username и update не вызываются во время запроса PUT

Сообщение Anonymous »

Я работаю над проектом Django Rest Framework (DRF), где мне нужно проверить поле имени пользователя и обработать пользовательскую логику обновления в сериализаторе. В моей модели есть поле имени пользователя с уникальным значением = True. Вот соответствующая настройка:
Модель:

Код: Выделить всё

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
pass
Сериализатор:

Код: Выделить всё

class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = models.CustomUser
fields = ["id", "username", "first_name", "last_name"]
read_only_field = ["id"]
extra_kwargs = {
"password": {"write_only": True},
}

def validate_username(self, value):
print('here.......')
user_model = get_user_model()
request = self.context.get('request')
if request and request.method in ['PUT', 'PATCH']:

if user_model.objects.filter(username=value).exclude(id=self.instance.id).exists():
raise serializers.ValidationError('User with this username already exists.')
else:
if user_model.objects.filter(username=value).exists():
raise serializers.ValidationError('User with this username already exists.')
return value

class CustomUserProfileSerializer(serializers.ModelSerializer):
user = CustomUserSerializer()
roles = ProfileRolesSerializer(many=True)
department = DepartmentSerializer()
gender = GenderSerializer()
Просмотры:

Код: Выделить всё

class CustomUpdateView(APIView):
def put(self, request, *args, **kwargs):
serializer = CustomUserProfileSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Когда я отправляю запрос PUT на обновление профиля пользователя, методы validate_username и update в сериализаторе не выполняются. Вместо этого я получаю ошибку ответа:

Код: Выделить всё

{
"user": {
"username": [
"User with this username already exists."
]
}
}
Я подозреваю, что ограничение unique=True по умолчанию для поля имени пользователя обходит проверку на уровне сериализатора.
Я пробовал:
  • Добавление операторов печати в методы validate_username и update —
    они никогда не выполняются.
  • Переключение на пользовательский APIView (CustomUpdateView) — без изменений.< /li>
    Убедитесь, что CustomUserProfileSerializer правильно используется в представлении.
Что может быть причиной этой проблемы и как я могу гарантировать, что validate_username и обновление методы вызываются во время запроса PUT?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -during-pu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Django Rest Framework: методы validate_username и update не вызываются во время запроса PUT
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между request.GET.get('username') и request.META.get('HTTP_X_ USERNAME') в DRF
    Anonymous » » в форуме Python
    0 Ответы
    155 Просмотры
    Последнее сообщение Anonymous
  • Django-rest-framework {"detail": "Учетные данные для аутентификации не предоставлены." } с помощью django-rest-knox
    Anonymous » » в форуме Python
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Django Rest Framework Partial Update
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Ошибка метода PUT Laravel: метод PUT не поддерживается для маршрута
    Anonymous » » в форуме Php
    0 Ответы
    142 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»