gpt4 book ai didi

python - FactoryBoy 将属性分配给 SubFactory 的属性

转载 作者:太空狗 更新时间:2023-10-30 00:03:14 25 4
gpt4 key购买 nike

在 FactoryBoy 中定义一个 ModelFactory 时,我需要访问由 SubFactory 创建的另一个模型的属性并将其分配给这个 ModelFactory 的属性。

这就是我想要做的:

import factory
class MyModelFactory(factory.DjangoModelFactory):
FACTORY_FOR = MyModel

created_by = factory.SubFactory(AdminUserFactory)**.id**

显然这不起作用,因为没有 AdminUser 对象来访问 MyModelFactory 类定义中的 id。

这是我做的,但是很丑:

import factory
class MyModelFactory(factory.DjangoModelFactory):
FACTORY_FOR = MyModel

dummy_created_by = factory.SubFactory(AdminUserFactory)
created_by = factory.LazyAttribute(lambda o: o.dummy_created_by.id)

@classmethod
def _create(cls, target_class, *args, **kwargs):
del kwargs['dummy_created_by']
return super(MyModelFactory, cls)._created(
target_class, *args, **kwargs)

我试图通读 Factory_Boy docs但没有看到允许我延迟访问该属性的类或函数。有人有什么建议吗?

最佳答案

从 factoryboy 2.4.0 开始你可以使用 exclude .这使您可以向工厂添加一个不会传递到模型类的参数

import factory
class MyModelFactory(factory.DjangoModelFactory):
created_by = factory.SubFactory(AdminUserFactory)
created_by_id = factory.LazyAttribute(lambda o: o.created_by.id)

class Meta:
model = MyModel
exclude = ['created_by']

我已将 OP 示例改为使用 created_by_id,但您可以重命名它以使其对您有意义。

关于python - FactoryBoy 将属性分配给 SubFactory 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17978593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com