当我命名我的RelatedFactory变量pv_something
时,工厂才会在post_generation
方法之后运行。当我将变量重命名为param_val_something
时,它们将在post_generation
方法之前运行。
在以下代码中,RelatedFactory
在post_generation
之后才会运行,因此self.something_set.all()
为空,并且永远不会执行第t.something_else = 'abc'
行。
class ThingFactory(factory.DjangoModelFactory):
class Meta:
model = Thing
name = 'a thing'
pv_something = factory.RelatedFactory(SomethingFactory, 'thing')
@factory.post_generation
def post(self, create, extracted, **kwargs):
for t in self.something_set.all():
t.something_else = 'abc'
在以下代码中,唯一的区别是将变量pv_something
重命名为param_val_something
。现在,self.something_set.all()
不为空,行t.something_else = 'abc'
已执行。
class ThingFactory(factory.DjangoModelFactory):
class Meta:
model = Thing
name = 'a thing'
param_val_something = factory.RelatedFactory(SomethingFactory, 'thing')
@factory.post_generation
def post(self, create, extracted, **kwargs):
for t in self.something_set.all():
t.something_else = 'abc'
我使用的是Python 3.4.3,Django 1.8.5和工厂男孩2.5.2。
周五晚上的午夜,这几乎让我超越了边缘。