Тестирование моделей с FileField/ImageField в Django

Оказалось, что тестирование моделей с файлом (поле FileField) или картинкой (поле ImageField) в Django не так уж очевидно. Допустим, у нас есть модель:

class MagicPony(models.Model):
  photo = models.ImageField(_('Photo'), upload_to='uploads/ponies')

При загрузке файла через HTML-форму проблем не возникает, но, чтобы загрузить изображение с диска, нужно дополнительно обернуть наш файл в объект File:

from django.core.files import File

class PonyTest(TestCase):
  def test_magic_power(self):
    file = open('pony.jpg', 'rb')
    file = File(file)
    pony = MagicPony.objects.create(photo=file)

    # Теперь можно писать любые проверки (наличие магической силы,
    # количество копыт и т. п.)
Вы можете улучшить этот пост, отредактировав его на Гитхабе.

Обо мне

Я живу в Берлине и работаю фронтенд-разработчиком в Хире, а в свободное время фотографирую, пишу, глажу своих собак и пью кофе.

Читайте обо мне на моём сайте и подпишитесь на мой блог о фотографии и твитер.