Фреймворк Django Rest UnicodeDecodeError

#django #django-models #django-rest-framework

Вопрос:

Доступная модель:

 photo = models.ImageField(verbose_name='Фото', upload_to='images/human/%Y/%m/%d/', 
default='default/user.png', blank=True)
    photo_200 = ImageSpecField(
        source='photo',
        processors=[ResizeToFill(200, 200)],
        format='JPEG',
        options={'quality': 80},
    )
    photo_272 = ImageSpecField(
        source='photo',
        processors=[ResizeToFill(272, 250)],
        format='JPEG',
        options={'quality': 80},
    )
 

сериализатор:

 class HumanListSerializer(serializers.ModelSerializer):

    class Meta:
        model = Human
        fields = (
            'name',
            'surname',
            'middle_name',
            'description',
            'photo_272',
            'slug'
        )
 

Я получаю ошибку на photo_272 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

с картинкой photo все в порядке, так как в ней не используется фреймворк django rest

Комментарии:

1. 1) Умозрительное предположение: вы используете неправильную кодировку, исправление кодировки должно решить проблему. По крайней мере, для меня это было так. 2) Вы не показываете часть своего кода, в которой происходит декодирование, это та часть, в которой возникает ошибка.

2. Пожалуйста, добавьте дополнительную информацию об ошибке, например, полную обратную трассировку ошибок, способ воспроизведения ошибки и т. Д

Ответ №1:

Я думаю, что платформа django rest не знает, как правильно сериализовать поле ImageSpecField, поскольку это не стандартное поле модели django. Поэтому вам нужно добавить пользовательский метод в сериализатор

 class HumanListSerializer(serializers.ModelSerializer):
    photo_272 = serializers.SerializerMethodField()
    class Meta:
        model = Human
        fields = (
            'name',
            'surname',
            'middle_name',
            'description',
            'photo_272',
            'slug'
        )
    
    def get_photo_272(self, record: Human):
        return record.photo_272.url