8

FactoryBoy で ModelFactory を定義する際に、SubFactory によって作成された別のモデルの属性にアクセスし、それをこの ModelFactory の属性に割り当てる必要があります。

これは私がやりたいことです:

import factory
class MyModelFactory(factory.DjangoModelFactory):
    FACTORY_FOR = MyModel

    created_by = factory.SubFactory(AdminUserFactory)**.id**

MyModelFactory クラス定義の id にアクセスするための AdminUser オブジェクトがないため、明らかに機能しません。

これは私がやったことですが、醜いです:

import factory
class MyModelFactory(factory.DjangoModelFactory):
    FACTORY_FOR = MyModel

    dummy_created_by = factory.SubFactory(AdminUserFactory)
    created_by = factory.LazyAttribute(lambda o: o.dummy_created_by.id)

    @classmethod
    def _create(cls, target_class, *args, **kwargs):
        del kwargs['dummy_created_by']
        return super(MyModelFactory, cls)._created(
            target_class, *args, **kwargs)

Factory_Boyのドキュメントを読み込もうとしましたが、属性に遅延アクセスできるクラスまたは関数が見つかりませんでした。誰にも提案はありますか?

4

3 に答える 3

5

SelfAttributeを使用します。

class MyModelFactory(factory.django.DjangoModelFactory):
    FACTORY_FOR = MyModel
    dummy_created_by = factory.SubFactory(AdminUserFactory)
    created_by = factory.SelfAttribute('dummy_created_by.id')
于 2014-06-16T23:18:46.670 に答える
-2

ミキサーを使用してみてください:

from mixer.backend.django import mixer

mixer.blend(MyModel, created_by=lambda: mixer.blend(AdminUser).id)
于 2014-01-07T19:19:27.737 に答える