У меня есть отдельный сериализатор для обновления учетной записи пользователя, и по какой-то причине всякий раз, когда я пытаюсь использовать неверный ввод, он не отправляет ошибки проверки в качестве ответа, он только отправляет обратно исходные значения, которые были установлены. Например. старое имя пользователя - abc123, если я пытаюсь обновить его до abc123 *, я хочу, чтобы он выдавал ошибку, говоря, что это не правильный формат, но вместо этого он просто отправляет обратно abc123 как serializer.data. Кто-нибудь знает, почему это происходит?
сериализатор
class UpdateAccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(max_length=16)
full_name = serializers.CharField(max_length=50)
class Meta:
model = Account
fields = ['username', 'full_name']
def validate_username(self, username):
if Account.objects.filter(username=username).exists():
raise serializers.ValidationError(_("This username is taken."))
if not re.fullmatch(r'^[a-zA-Z0-9_]+$', username):
raise serializers.ValidationError(
_("Usernames must be alphanumeric, and can only include _ as special characters."))
return username
def validate_full_name(self, full_name):
if not re.fullmatch(r'^[a-zA-Z ]+$', full_name):
raise serializers.ValidationError(
_("Invalid name."))
return full_name
def update(self, instance, validated_data):
instance.username = validated_data.get('username', instance.username)
instance.full_name = validated_data.get(
'full_name', instance.full_name)
instance.save()
return instance
view
class UpdateAccountView(APIView):
def patch(self, request, pk, format=None):
account = Account.objects.filter(id=pk)
if account.exists():
account = account[0]
if request.user == account:
serializer = UpdateAccountSerializer(
account, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer._errors, status=status.HTTP_400_BAD_REQUEST)
return Response(status=status.HTTP_404_NOT_FOUND)
Если вам интересно, почему я использую отдельные сериализаторы для регистрации и обновлений, то это потому, что эти поля должны бытьтолько пользователям разрешено свободно обновлять.
Я думаю, это из-за этих строк (ниже), но я не могу найти исправление.
instance.username = validated_data.get('username', instance.username)
instance.full_name = validated_data.get('full_name', instance.full_name)