tema_sun
@tema_sun

Как в Django сделать сохранение локального файла в ImageField?

Пишу новый проект на Джанго и решил-таки, наконец, пойти по пути TDD. Но столкнулся с проблемой при тесте загрузки файла. Т.к. в настоящий момент никаких форм у меня пока нет, хочу проверить просто соответствующие методы.

Есть некий класс:
class Photos(models.Model):
    #*тут много чего опущено, но сути оно не меняет - в таком варианте тоже не работает
    photo_file = models.ImageField(upload_to=photos_storage)
    def add_photo(self, photo_file):
        with open(photo_file) as f:
            my_file = File(f)
            filename = "filename.jpg"
            self.photo_file.save(filename, my_file)

При проверке размеров исходного файла и загруженного получаю:
AssertionError: 301202L is not 1830L
Т.е в upload_to попадает только обрывок файла (вижу, что обрывок т.к. в начале там EXIF идет). Не понимаю куда копать. Может при работе с локальными файлами надо что-то другое делать? Т.к. если я беру файлы из request.FILES это все работает в другом проекте.
Работаю на Win7, если это имеет значение. Django 1.5, Python 2.7.
  • Вопрос задан
  • 3145 просмотров
Решения вопроса 1
tema_sun
@tema_sun Автор вопроса
Нет, ну это надо же. 2 часа бился-бился, а надо было сменить режим на binary.
Надо делать open(photo_file, "rb")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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