如何解决如何根据父属性的条件生成子工厂
class PayInFactory(factory.DjangoModelFactory):
class Meta:
model = PayIn
@factory.lazy_attribute
def card(self):
if self.booking_payment and self.booking_payment.payment_type in [bkg_cts.PAYMENT_CARD,bkg_cts.PAYMENT_CARD_2X]:
factory.SubFactory(
CardFactory,user=self.user,)
仅当 card
字段在 booking_payment
中具有 payment_type
值时,我才尝试生成字段 [bkg_cts.PAYMENT_CARD,bkg_cts.PAYMENT_CARD_2X]
我怎样才能正确地做到这一点?
SubFactory
中允许 lazy_attribute
吗?
如果可能的话,我希望能够从 PayInFactory 修改 Card 字段:
>>> PayInFactory(card__user=some_user)
PostGeneration
不会这样做,因为我需要在调用创建之前使用此 Card
。我覆盖了 _create
,如果可用,它可能会使用该卡。
谢谢!
解决方法
解决方案在于factory.Maybe
:
class PayInFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.PayIn
card = factory.Maybe(
factory.LazyAttribute(
lambda o: o.booking_payment and o.booking_payment.payment_type in ...
),factory.SubFactory(
CardFactory,# Fetch 'user' one level up from CardFactory: PayInFactory
user=factory.SelfAttribute('..user'),),)
然而,我还没有测试额外的参数是否实际传递给了 CardFactory
,也没有测试当 CardFactory
没有被调用时会发生什么——你必须检查(可能会打开一个问题如果您遇到意外行为,请在项目中!)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。