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)))