我分享我的解决方案,我自己的问题,我认识到解决方案,同时输入问题......它可能对其他人有用。因素男孩父母和相关工厂相同的模型属性实例
在我的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的背景下进行评估。