我有一个这样的工厂:
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,
)
Run Code Online (Sandbox Code Playgroud)
card仅当该booking_payment字段具有payment_type以下值时,我才尝试生成该字段[bkg_cts.PAYMENT_CARD, bkg_cts.PAYMENT_CARD_2X]
代码进入该语句,但生成后卡字段为空。
我怎样才能正确地做到这一点?允许SubFactory进入吗lazy_attribute?
如果可能的话,我希望能够从 PayInFactory 修改卡字段,如下所示:
>>> PayInFactory(card__user=some_user)
Run Code Online (Sandbox Code Playgroud)
PostGeneration不会这样做,因为我需要Card在调用创建之前使其可用。我覆盖了_create,它可能会使用该卡(如果可用)。
谢谢 !
小智 6
解决办法在于factory.Maybe:
class PayInFactory(factory.django.DjangoModelFactory):\n class Meta:\n model = models.PayIn\n\n card = factory.Maybe(\n factory.LazyAttribute(\n lambda o: o.booking_payment and o.booking_payment.payment_type in ...\n ),\n factory.SubFactory(\n CardFactory,\n # Fetch \'user\' one level up from CardFactory: PayInFactory\n user=factory.SelfAttribute(\'..user\'),\n ),\n )\nRun Code Online (Sandbox Code Playgroud)\n但是,我还没有测试额外的参数是否实际传递给CardFactory,也没有测试当CardFactory不调用 \xe2\x80\x94 时会发生什么,你必须检查(如果你得到,可能会在项目上提出一个问题)意想不到的行为!)。
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |