私はfactory_boy
で工場を建設しています。これは、djangoモデルを生成します。私はユーザーがインラインでどのような引数を入力したかを見たいと思います。私の工場自体は今、ユーザーがs = SomeFactory()
を言うことができるし、それがうまく動作しますが、私は、ユーザー入力ならば、自分の引数を検出したいこのfactory_boyオリジナルのkwargsを抽出
class SomeFactory(factory.django.DjangoModelFactory):
name = factory.Sequence(lambda n: 'Instance #{}'.format(n))
some_other_thing = factory.SubFactory(SomeOtherFactory)
class Meta:
model = SomeModel
のように見えます。ユーザーは、私がこれまで試したどのようなs = SomeFactory(name='Matt')
のように、自分の名前で渡された場合SomeFactory
クラス
- これをして自分の
__init__
機能を書く- 例えば、ある伝えるために私がと呼ぶときに不思議に上書きされて呼び出されません。
s.__init__()
- 例えば、ある伝えるために私がと呼ぶときに不思議に上書きされて呼び出されません。
- 同じようになります
__new__
方法 - を上書きすることは上書き悪いこれは私の
kwargs
など、すべてのフィールドは、ユーザーが定義されていないものだけを与える_adjust_kwargs
- 命名します。例えば、
s = SomeFactory(name='Matt')
を呼び出して、私はそれは不可能それでも同じ問題が発生した_create
- を上書き入力が自分の引数を教えてくれたりしませ
- することができた、
name
とsome_other_thing
ためのキーでkwargs
のdictになるだろうそのkwargs
で、_adjust_kwargs
を上書きすると、元のkwargs
ではなく、すべての引数の含まれていません
- 命名します。例えば、
私が後だ多くの機能がfactory_boy
のStepBuilder
の内側にブラックボックスだと思う(私はそれがinstantiate
方法でだ疑いがある)が、私は私がやりたいことを修正する方法が分かりません。
s = SomeFactory()
への呼び出しで、最初にkwargs
が設定されていることを知る方法について考えている人はいますか?私。私がs = SomeFactory(name='Matt')
と言ったら、ユーザーが手動で名前を設定していると判断しますか?
ありがとうございます!
アップデート:私はあなたが唯一のユーザーkwargsからを取得するためにcreate
メソッドをオーバーライドすることができdjango
バージョン1.11.2
、factory_boy
バージョン2.8.1
を実行している、とpython
バージョン3.5.2
ちょっと@dan_kaufhold、残念ながら '_prepare'メソッドを使用しても私の問題は解決しません。このメソッドは新しいファクトリを作成するときにトリガされますが、 'kwargs'の値は渡された元の引数と同じではありません。すべての引数が含まれています - 例えば、' UserFactory(password = 'apple ') 'は' {"email": "[email protected]"、 "password": "test123"} 'の' kwargs'を与えます。私は、必要なフィールドがユーザによって手動で入力されたのか、工場の少年によって生成されたのかを判断しようとしています。あなたの例では、 'email'がユーザかマシンかを検出できません。 – mjkaufer
@mjkauferもっと詳しく見てください。 'kwargs'に他のパスワードがない場合、パスワードは' test123'にのみ設定されます。私がコメントした最初のコード例で 'kwargs 'が何であるかを実際に確認すると、それはあなたが入れた正確な' kwargs'であることがわかります.UserFactoryの例では、私はそれを正確に行います。私はパスワードが 'kwargs'で与えられているかどうかを確認し、それを操作します。 –
私のコードでは、既存のフィールドがオーバーライドされているかどうかを確認したいと思います。あなたの例では、パスワードがUserFactoryのフィールドであった場合、パスワード 'kwarg'が手動で入力されたかどうかを区別することができないか、コンピュータが' _prepare'メソッドに基づいてそれを生成したかどうかを区別できません。 – mjkaufer