如何使用factory-boy
定义依赖于其他字段的字段?
例如,我想定义email
取决于first name
的{{1}}和last name
。
我尝试使用User
装饰器。但是,我的系统需要在创建实例之前定义电子邮件。
答案 0 :(得分:10)
来自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)