如何使用ImageSpecField测试Django模型?

时间:2015-07-29 11:46:52

标签: python django django-imagekit

我有一个以下模型:

class Room(models.Model):
    order = models.SmallIntegerField()
    name = models.CharField(max_length=20)
    background = models.ImageField(upload_to='room_background', blank=False, null=False)
    background_preview = ImageSpecField(source='background', processors=[ResizeToFit(300, 400)])

    def serialize(self):
        room_dict = model_to_dict(self)
        room_dict['background_preview_url'] = self.background_preview.url
        return room_dict

我没有直接在我的观看中使用空间对象,而是将它们转换为dict,并使用&background.dreview_url'键。

现在我想用序列化的房间对象编写一些Django测试。问题是,如果我这样做:

test_room = Room(order=1)
test_room.save
test_room.serialize()

ImageKit会抛出MissingSource错误,因为我的测试室中没有背景图像来生成预览。

我如何在测试中更好地克服这个问题?我应该携带背景图像的夹具吗? 或者我应该写第二个serialize_for_test()方法? 或者也许我可以使用background_preview字段的一些测试值来设置Room()? - 我尝试了这个,但直接的房间(background_preview =' fake_url')没有用。

感谢。

1 个答案:

答案 0 :(得分:1)

解决方案,对我有用:

from django.core.files.uploadedfile import SimpleUploadedFile

test_room.image = SimpleUploadedFile(name='foo.gif', content=b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00')
test_room.save