Reputation: 81
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
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