Написал ClassBasedView, наследник
RetrieveUpdateDestroyAPIView
, сериализатор и модель с полем
logo
типа
ImageField
. У модели переопределил метод
save()
, чтобы при сохранении приводить размеры логотипов к нужному формату:
def save(self, *args, **kwargs):
super(Company, self).save(*args, **kwargs)
print(self.logo.path)
if self.logo:
resize_logo(self) # Читает данные экземпляра, работает уже с ними
Здесь
resize_logo()
- функция, выполняющая работу по изменению размера загруженного файла.
Для загрузки файлов на сервер использую
ngFileUpload, делаю это так:
if ($scope.logo.length < 1) {
return;
}
Upload.upload({
url: logoUrl, // logoUrl=/api/v1/item/id/, ну или вроде того
file: $scope.logo,
method: 'PUT',
fields: {
name: $scope.item.name // Обязательное поле для модели Django
}
}).success(function(data) {
$scope.item.logo = data.logo;
});
В результате выполнения PUT-запроса на сервер передаётся новый файл для логотипа (вижу в консоли Firebug), но при этом в модели поле не обновляется.
Ставил
print()'ы в нужных местах, установил, что в метод
save()
передаётся старое значение поля
logo
.
В чём моя ошибка? Как исправить?