Factory_boy не создает RelatedFactory в трейте

I've got a Purchase model and a PurchaseInfo model. PurchaseInfo has a foreign key to Purchase. I'm trying to modify an existing Factory for Purchase that will create PurchaseInfo at the same time using RelatedFactory since it's a reverse foreign key relationship. The only thing is that I wanted to use a Taint so that I could control the value of fields within PurchaseInfo. Normally when I create a Purchase like p = PurchaseFactory() the PurchaseInfo is created with null fields inside of it. If I create a Purchase like p = PurchaseFactory(info=True), so I can get the field modifications via the Taint, the PurchaseInfo is not created at all.

У меня такое чувство, что помещать RelatedFactory в Taint - это не то, что нужно. Как правильно это сделать?

Модели:


class Purchase(Model):
    ...

class PurchaseInfo(Model):
    purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE, unique=True, db_index=True)
    lock = DateTimeField(null=True)
    lock_by = ForeignKey(...
class PurchaseInfoFactory(DjangoModelFactory):
    class Meta:
        model = PurchaseInfoField

    lock = None
    lock_by = None

class PurchaseFactory(DjangoModelFactory):
    class Meta:
        model = Purchase

    info = RelatedFactory(PurchaseInfoFactory,
                          factory_related_name='purchase')

    class Params:
        info = Trait(internalfield=RelatedFactory(PurchaseInfoFactory,
                                                  factory_related_name='purchase',
                                                  lock=timezone.now() - relativedelta(months=1),
                                                  lock_by=SubFactory(UserFactory, user_id=1)))

Мне не нравится мое решение, но вот что я сделал. Я вывел вторичную фабрику с альтернативной RelatedFactory. Это работает.

class PurchaseFactory(DjangoModelFactory):
    class Meta:
        model = Purchase

    info = RelatedFactory(PurchaseInfoFactory,
                          factory_related_name='purchase')
class InfoPurchaseFactory(DjangoModelFactory):
    class Meta:
        model = Purchase

    info = Trait(internalfield=RelatedFactory(PurchaseInfoFactory,
                                                  factory_related_name='purchase',
                                                  lock=timezone.now() - relativedelta(months=1),
                                                  lock_by=SubFactory(UserFactory, user_id=1)))
Вернуться на верх