我分享我的解決方案,我自己的問題,我認識到解決方案,同時輸入問題......它可能對其他人有用。因素男孩父母和相關工廠相同的模型屬性實例
在我的Django模型中,我有一個Gateway
,它有一組Node
s,它們都應該有相同的Vendor
。
class Vendor(models.Model):
name = models.CharField(max_length=80, null=False)
class Gateway(models.Model):
vendor = models.ForeignKey(Vendor, related_name='gateways')
class Node(models.Model):
gateway = models.ForeignKey(Gateway, related_name='nodes')
vendor = models.ForeignKey(Vendor, related_name='nodes')
現在我想用factory boy
產生假數據。這裏的VendorFactory
和NodeFactory
。
class VendorFactory(factory.django.DjangoModelFactory):
class Meta:
model = Vendor
name = 'test_vendor'
class NodeFactory(factory.django.DjangoModelFactory):
class Meta:
model = Node
# is created after this node instance
vendor = factory.SubFactory(VendorFactory)
這在創建node = NodeFactory()
時工作正常。
問題出在GatewayFactory
。我想要的是,gateway = GatewayFactory()
創建一個Gateway
,該實例由Node
實例引用,並且網關和節點使用相同的Vendor
。
A嘗試了一些東西,但失敗了。這裏一個鏡頭:
class GatewayFactory(factory.django.DjangoModelFactory):
class Meta:
model = Gateway
node = factory.RelatedFactory(NodeFactory, 'gateway', vendor=factory.LazyAttribute(lambda o: o.vendor))
vendor = factory.SubFactory(VendorFactory)
的問題是RelatedFactory
是GatewayFactory後評估和LazyAttribute
或SelfAttribute
在NodeFactory的背景下進行評估。