Тестирование моделей с 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)
# Теперь можно писать любые проверки (наличие магической силы,
# количество копыт и т. п.)