Python 如何让FactoryBoy创建临时目录?

Python 如何让FactoryBoy创建临时目录?,python,factory-boy,Python,Factory Boy,我想让FactoryBoy为我创建一个Django模型实例,然后还创建一个临时目录 我试过几件事: 类组织工厂(factory.DjangoModelFactory): 类元: 模型=组织 some_directory=tempfile.mkdtemp 及 some_directory=tempfile.mkdtemp() 及 @factory.lazy\u属性 def some_目录(self): 返回tempfile.mkdtemp() 当我尝试在测试中使用某个目录时,该值始终为“无”

我想让FactoryBoy为我创建一个Django模型实例,然后还创建一个临时目录

我试过几件事:

类组织工厂(factory.DjangoModelFactory):
类元:
模型=组织
some_directory=tempfile.mkdtemp

some_directory=tempfile.mkdtemp()

@factory.lazy\u属性
def some_目录(self):
返回tempfile.mkdtemp()

当我尝试在测试中使用某个目录时,该值始终为“无”。

为了了解发生了什么,最好深入了解factory boy的内部结构

工厂内件
工厂的生命周期中有不同的阶段:

  • 宣言
  • 当Python导入包含
    类工厂
    声明的模块时,该类的定义被处理到工厂的源代码中的一个特殊元类。 元类读取所有定义的类属性和方法,分析它们,并以特定的方式存储它们

  • 使用出厂设置
  • 当您的代码使用
    MyFactory()
    时,该类将根据以下步骤开始构建一个实例:

  • 评估声明:要求每个
    LazyAttribute
    子工厂等生成其值
    
  • 将结果参数传递给
    Meta.model
    类构造函数­-这提供了所述类的实例
  • 要求所有生成后声明(
    RelatedFactory
    和co)处理生成的对象-注意,从这些声明返回的任何值都会被丢弃
  • 返回实例
  • 解决你的问题 在您的情况下,我相信问题可能是
    某个目录
    不是模型的
    \uuuu init\uuuuu
    的有效kwarg,或者被模型类上的某些魔法所取代

    最简单的方法是在后一代层面上工作:

    类组织工厂(factory.django.DjangoModelFactory):
    类元:
    模型=组织
    @工厂后一代
    定义一些目录(组织、*args、**kwargs):
    tmpdir=tempfile.mkdtemp()
    #将生成的临时目录附加到生成的组织。
    org.some_directory=tmpdir