dunmaksim
@dunmaksim
Технический писатель

Как обновить ImageField в DRF?

Написал 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.
В чём моя ошибка? Как исправить?
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
dunmaksim
@dunmaksim Автор вопроса
Технический писатель
Посоны, нашёл решение, опубликовал статью: dunmaksim.blogspot.ru/2015/06/django-rest-framewor...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы