我正在建造一個生產django模型的工廠factory_boy
。我想看看用戶輸入內聯的參數。我廠本身看起來像這樣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()
和它的工作很好,但我想如果用戶輸入自己的參數檢測。例如,要告訴我們,如果用戶以自己的名義通過,如s = SomeFactory(name='Matt')
我到目前爲止已經試過是
- 寫我自己
__init__
功能在SomeFactory
類- 這當我撥打
s = SomeFactory()
時,我也不會打電話,也不會撥打電話s.__init__()
- 這當我撥打
- 同樣適用於覆蓋
__new__
方法 - 改寫命名不佳
_adjust_kwargs
- 這給了我所有領域
kwargs
,而不僅僅是用戶定義的值。例如,呼叫s = SomeFactory(name='Matt')
,我會得到一個kwargs
字典與鍵name
和some_other_thing
,這使得它不可能知道自己輸入參數或不
- 這給了我所有領域
- 改寫
_create
- 仍然遇到同樣的問題覆蓋
_adjust_kwargs
,在kwargs
不包含原始kwargs
,而是所有的參數都
- 仍然遇到同樣的問題覆蓋
我認爲很多我以後的功能是在factory_boy
的StepBuilder
(我懷疑它在instantiate
方法中)的黑盒子裏,但我不知道如何修改它以做我想做的。
有沒有人有任何想法如何找出哪個kwargs
最初設置在s = SomeFactory()
的電話?即確定如果我說s = SomeFactory(name='Matt')
,那用戶手動設置名字?
謝謝!
更新:我運行django
版1.11.2
,2.8.1
factory_boy
版本,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