作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以使用 Traits(或 Factory Boy 中的其他任何东西)来触发其他工厂对象的创建?例如:在用户购买产品的情况下,我想创建一个用户并通知该用户购买了一个简单的产品:
UserFactory.create(with_purchased_product=True)
最佳答案
首先,我会诚实地告诉你:我不知道这是否是最好的答案,或者它是否遵循了 python 的良好实践。
无论如何,我为这种场景找到的解决方案是使用 post_generation .
import factory
class UserFactory(factory.DjangoModelFactory):
class Meta:
model = User
name = factory.Faker('name'))
@factory.post_generation
def with_purchased_products(self, create, extracted, **kwargs):
if extracted is not None:
PurchaseFactory.create(user=self, with_products=extracted)
class PurchaseFactory(factory.DjangoModelFactory):
class Meta:
model = Purchase
user = factory.SubFactory(UserFactory)
@factory.post_generation
def with_products(self, create, extracted, **kwargs):
if extracted is not None:
ProductFactory.create_batch(extracted, purchase=self)
class ProductFactory(factory.DjangoModelFactory):
class Meta:
model = Product
purchase = factory.SubFactory(PurchaseFactory)
UserFactory.create(with_purchased_products=10)
关于Django + 工厂男孩 : Use Trait to create other factory objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47419125/
我是一名优秀的程序员,十分优秀!