で作成されたオブジェクトを渡すために呼び出しfactory.LazyAttribute
内で使用しています。これはうまくいきます。SubFactory
factory_parent
しかし、作成したオブジェクトを に渡すと、RelatedFactory
がLazyAttribute
表示されなくなりfactory_parent
、失敗します。
これはうまくいきます:
class OKFactory(factory.DjangoModelFactory):
class = Meta:
model = Foo
exclude = ['sub_object']
sub_object = factory.SubFactory(SubObjectFactory)
object = factory.SubFactory(ObjectFactory,
sub_object=factory.LazyAttribute(lambda obj: obj.factory_parent.sub_object))
への同一の呼び出しLazyAttribute
はここで失敗します:
class ProblemFactory(OKFactory):
class = Meta:
model = Foo
exclude = ['sub_object', 'object']
sub_object = factory.SubFactory(SubObjectFactory)
object = factory.SubFactory(ObjectFactory,
sub_object=factory.LazyAttribute(lambda obj: obj.factory_parent.sub_object))
another_object = factory.RelatedFactory(AnotherObjectFactory, 'foo', object=object)
同一のLazyAttribute
呼び出しは factory_parent を見ることができなくなり、AnotherObject
値にのみアクセスできます。LazyAttribute は次のエラーをスローします。
AttributeError: The parameter sub_object is unknown. Evaluated attributes are...[then lists all attributes of AnotherObjectFactory]
これを回避する方法はありますか?
sub_object=sub_object を ObjectFactory 呼び出しに入れることはできません。
sub_object = factory.SubFactory(SubObjectFactory)
object = factory.SubFactory(ObjectFactory, sub_object=sub_object)
私がそうするなら:
object2 = factory.SubFactory(ObjectFactory, sub_object=sub_object)
2 番目の sub_object が作成されますが、両方のオブジェクトが同じ sub_object を参照する必要があります。私はSelfAttribute
無駄にしようとしました。