gpt4 book ai didi

Django + 工厂男孩 : Use Trait to create other factory objects

转载 作者:行者123 更新时间:2023-12-04 20:30:29 30 4
gpt4 key购买 nike

是否可以使用 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 tests with fakes & factories 的文章.也许也能帮到你。

关于Django + 工厂男孩 : Use Trait to create other factory objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47419125/

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