の動作を制御する名前付きパラメータ(モデル属性ではない)を定義する方法はありますか?たぶん?例えば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は、これらのフィールドをデータベースに保存するときにこれらのフィールドを使用しようとするため、整合性エラーが発生します。
これを行う方法はありますか?
「除外」を取り除き、両方のフィールドをクラス「Params」に移動した場合、「うまくいかない」has_purchaseパラメータを読み取ることができません(理由はわかりません) – user2937998
私は、 'purchases'属性を動かすべきだと思います。あなたが言ったように、 'Params'の中で' has_purchase'は読み込まれないので(やはり除外が必要です)。あなたは 'lazyAttribute'を試しましたか? –
はい、しかしLazyAttribute Djangoマネージャーでも、次のエラーが発生します: "'purchases'はこの関数の無効なキーワード引数です – user2937998