2017-11-22 4 views
0

の動作を制御する名前付きパラメータ(モデル属性ではない)を定義する方法はありますか?たぶん?例えばDjango + Factory Boy:factory.Maybe + factory.RelatedFactoryの動作を制御するための名前付きパラメータの使い方

:私はたぶん条件によってRelatedFactoryの作成を制御という名前のパラメータを作成したい、私はこれを実行しようとしました:

# factories.py 
class Purchase(factory.DjangoModelFactory): 
    user = factory.SubFactory('project.factories.UserFactory') 
    total = uniform(10, 100) 

    class Meta: 
     model = Purchase 

class UserFactory(factory.DjangoModelFactory): 
    first_name = factory.Faker('first_name') 
    last_name = factory.Faker('last_name') 

    has_purchase = False 
    purchases = factory.Maybe(
     'has_purchase', 
     yes_declaration=factory.RelatedFactory(Purchase, 'purchase'), 
     no_declaration=None 
    ) 

    class Meta: 
     exclude = ['has_purchase', 'purchases'] 
     model = User 

# tests.py 
user_without_purchase = UserFactory.create() 
user_with_purchase = UserFactory.create(has_purchase=True) 

それは私ができないようです指定されたパラメータを使用してhas_purchaseの値を変更すると、常にFalseに設定されます。両方のフィールドが宣言されているかどうかわかりませんメタ属性を除いています。 除外またはDjangoModelFactoryは、これらのフィールドをデータベースに保存するときにこれらのフィールドを使用しようとするため、整合性エラーが発生します。

これを行う方法はありますか?

答えて

0

工場出荷時の少年がexclude属性に論文のフィールドを追加することなく提供される追加のパラメータに機能を持っているようだ:http://factoryboy.readthedocs.io/en/latest/reference.html#simple-parameters:多分http://factoryboy.readthedocs.io/en/latest/reference.html#lazyattributeと組み合わせて使用​​

class UserFactory(factory.DjangoModelFactory): 
    class Params: 
     has_purchase = False 

+0

「除外」を取り除き、両方のフィールドをクラス「Params」に移動した場合、「うまくいかない」has_purchaseパラメータを読み取ることができません(理由はわかりません) – user2937998

+0

私は、 'purchases'属性を動かすべきだと思います。あなたが言ったように、 'Params'の中で' has_purchase'は読み込まれないので(やはり除外が必要です)。あなたは 'lazyAttribute'を試しましたか? –

+0

はい、しかしLazyAttribute Djangoマネージャーでも、次のエラーが発生します: "'purchases'はこの関数の無効なキーワード引数です – user2937998

関連する問題