Почему повышение serializers.ValidationError() приводит к UnicodeDecodeError?

Я создаю django rest API (с ImageField) и он работает нормально. Но я хочу добавить некоторые валидации к некоторым полям CharFields. Я заметил несколько unicodeDecoderError при добавлении валидатора или просто при возникновении ошибки валидации. Потратил довольно много времени, пытаясь решить эту проблему. Любая помощь будет оценена по достоинству.

Вот мой файл serializers.py

from rest_framework import serializers
from .models import *

def validate_phone(phone_number: str):
  print(phone_number)
  if not (phone_number.startswith(("6", "7", "8", "9"))):
    raise serializers.ValidationError(
        {"phone": "phone number must startwith digits from 6-9 !!!"})

  if not phone_number.isnumeric():
    raise serializers.ValidationError(
         {"phone": "phone number should contain digits only !!!"})

  if len(phone_number) != 10:
     raise serializers.ValidationError(
         {"phone": "phone number must contain only 10 digits !!!"})


class StudentSerializer(serializers.ModelSerializer):
  start_date = serializers.DateField(format='%d %B %Y')
  phone = serializers.CharField(max_length=10, validators=[validate_phone])
  class Meta:
    model = Student
    fields = '__all__'

При возникновении ошибки валидации возникает ошибка UnicodeDecoderError. В остальном все работает нормально.

Это мой файл models.py

from django.db import models

class Student(models.Model):
    ...
    phone = models.CharField(max_length=10)
    ...
    start_date = models.DateField()
    profile_picture = models.ImageField(upload_to='profile/', blank=True)
    ...

Я отправляю данные с помощью javascript fetch API с функцией FormData(), которая обрабатывает форматирование и кодировку файла.

Вот файл javascript:

const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
  e.preventDefault();

  const formdata = new FormData(form);
  const json_data = Object.fromEntries(formdata);
  console.log(json_data);

  const requestOptions = {
    method: 'POST',
    body: formdata,
  };

  fetch("http://127.0.0.1:8000/api/join/", requestOptions)
    .then((response) => response.json())
    .then((result) => console.log(result))
    .catch((error) => console.error(error))

Чувствую себя беспомощным. Без поднятия ValidationError все работает нормально, я просто хочу добавить несколько валидаций без UnicodeDecodeError. Я попытался протестировать с помощью postman, и результат тот же. Я не знаю, как действовать дальше.

Где я промахнулся

я думаю, что ваша проблема здесь "profile_picture" это ImageField, попробуйте в StudentSerializer вернуть profile_picture.url вместо profile_picture, потому что profile_picture.url возвращает строку, а не экземпляр ImageField

Вернуться на верх