Django Rest Framework UnicodeDecodeError

Model available:

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},
    )

serializer:

class HumanListSerializer(serializers.ModelSerializer):

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

I get an error on photo_272 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

with picture photo everything is in order, since it is not used django rest framework

Upvotes: 1

Views: 673

Answers (1)

Yevhen Bondar
Yevhen Bondar

Reputation: 4707

I think the django rest framework doesn't know how to serialize ImageSpecField properly since it's not a standard django model field. So you need to add a custom method to the serializer

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

Upvotes: 5

Related Questions