工厂男孩:定义依赖于其他字段的字段

时间:2015-11-27 23:02:03

标签: django django-testing django-tests factory-boy

如何使用factory-boy定义依赖于其他字段的字段?

例如,我想定义email取决于first name的{​​{1}}和last name

我尝试使用User装饰器。但是,我的系统需要在创建实例之前定义电子邮件。

1 个答案:

答案 0 :(得分:10)

使用LazyAttribute

  

来自docs:

     

LazyAttribute是一个简单但极其强大的构建块,用于扩展工厂。

     

调用方法(通常是lambda)作为参数;该方法应该接受作为唯一参数构建的对象,并返回一个值。

post_generation

lazy_attribute装饰者。

  

来自docs:

     

如果一个简单的lambda不够,你可以使用lazy_attribute()装饰器。

     

这装饰了一个应该采用单个参数的实例方法self;方法的名称将用作要填充方法的返回值的属性的名称:

class UserFactory(factory.Factory):
    class Meta:
        model = User

    username = 'john'
    email = factory.LazyAttribute(lambda o: '%s@example.com' % o.username)