我正在分享我自己的问题的解决方案,我在输入问题时意识到了解决方案......它可能对其他人有用。
在我的 Django 模型中,我有一个Gateway
具有一组Node
s 的 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 和 aLazyAttribute
或 aSelfAttribute
在 NodeFactory 的上下文中评估之后评估。