(django) Кодек 'utf-8' не может декодировать байт 0x89 в позиции 0: недопустимый начальный байт
Сейчас я пытаюсь назначить две foreignkey
на одну пользовательскую модель пользователя, имя пользователя и поле изображения профиля.
Пользовательская модель пользователя:
class Account(AbstractBaseUser, PermissionsMixin):
class Meta:
verbose_name_plural = "Account List"
email = models.EmailField(max_length=255, unique=True)
username = models.CharField(max_length=255, unique=True)
name = models.CharField(max_length=255, default="")
profile_image = models.ImageField(max_length=255, upload_to=profile_image_path, blank=True, unique=True)
about = models.TextField(max_length=255, default='Write something about yourself...', blank=True)
start_date = models.DateTimeField(default=timezone.now)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
last_login = models.DateTimeField(auto_now=True)
objects = AccountManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username", "name"]
def __str__(self):
return self.username
Модель потока:
class Thread(models.Model):
options = (('active', 'Active'), ('deactivated', 'Deactivated'))
username = models.ForeignKey(Account, on_delete=models.CASCADE, to_field='username', related_name='user')
profile_image = models.ForeignKey(Account, on_delete=models.CASCADE, to_field='profile_image', related_name='profile')
alt = models.TextField(max_length=255, blank=True)
image = models.ImageField(max_length=255, upload_to=thread_image_path, default='images/family.png')
content = models.TextField(blank=True)
created = models.DateTimeField(default=timezone.now)
status = models.CharField(max_length=11, choices=options, default='active')
Однако, когда я пытаюсь создать поток, я всегда сталкиваюсь с ошибкой:
UnicodeDecodeError at /api/public/thread/
'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
Request Method: GET
Request URL: http://127.0.0.1:8000/api/public/thread/
Django Version: 4.0.4
Exception Type: UnicodeDecodeError
Exception Value:
'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
Exception Location: c:\Users\85291\Desktop\vscode\my-app\web\env\lib\site-packages\rest_framework\utils\encoders.py, line 50, in default
Эта ошибка возникла сразу после того, как я присвоил foreignkey изображению профиля, сериализатор не может сериализовать изображение в конечную точку API. Я попробовал зайти в encoders.py
и изменить кодировку на utf16, но проблема осталась.
У кого-нибудь есть идеи, что не так с моим кодом? Буду очень признателен.
Думаю, вы можете справиться с загруженным изображением.
class ThreadSerializer(serializers.ModelSerializer):
created = serializers.DateTimeField(format="%d %B, %Y %H:%M:%S")
uploaded_image = serializers.FileField(
max_length = 1000000,
allow_empty_file = False,
write_only = True
)
profile_image = UserSerializer(read_only = True)
class Meta:
model = Thread
fields = (
...,
'uploaded_image',
)
extra_kwargs = {
'image': { 'read_only': True }
}
def create(self, validated_data):
image_data = validated_data.pop('uploaded_image')
thread_obj = Thread(**validated_data)
thread_obj.image = image_data
thread_obj.save()
return thread_obj
Во frontend необходимо загрузить изображение с ключом uploaded_image
.