如何让FactoryBoy的ImageField在调用save()前生成图片?

14 投票
1 回答
6349 浏览
提问于 2025-04-21 07:04

主题。

现在(Factory Boy 版本 2.4.1),使用以下代码:

class ImageFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Image

    image = factory.django.ImageField(width=1024, height=768)

在保存的时候,image 的值会是 None,所以如果 Image 模型的 save 方法被重写,并且它在处理 image 时会出错,那就会失败。这正是我遇到的问题。

那么,如何在调用 save 之前生成 image 呢?

1 个回答

25

我找到了一种解决办法:

from django.core.files.base import ContentFile

class ImageFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Image

    image = factory.LazyAttribute(
            lambda _: ContentFile(
                factory.django.ImageField()._make_data(
                    {'width': 1024, 'height': 768}
                ), 'example.jpg'
            )
        )

撰写回答