#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