Я создаю фабрику с factory_boy
, которая генерирует модель django. Я хотел бы видеть, какие аргументы пользователь вводит встроенными. Моя фабрика выглядит так
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')
То, что я пробовал до сих пор,
- Writing my own
__init__
function in theSomeFactory
class- This gets mysteriously overwritten and is neither called when I call
s = SomeFactory()
, nor when I calls.__init__()
- This gets mysteriously overwritten and is neither called when I call
- То же самое касается перезаписи метода
__new__
. - Overwriting the poorly named
_adjust_kwargs
- This gives me all fields as
kwargs
, not just the ones the user defined. For instance, callings = SomeFactory(name='Matt')
, I would get akwargs
dict with keys forname
andsome_other_thing
, which makes it impossible to tell input their own argument or not
- This gives me all fields as
- Overwriting
_create
- Still encounter the same problem with overwriting
_adjust_kwargs
, in thatkwargs
doesn't contain the originalkwargs
, but rather all of the arguments
- Still encounter the same problem with overwriting
Я думаю, что многие функции, которые мне нужны, заключены в черный ящик внутри factory_boy
StepBuilder
(я подозреваю, что это в методе instantiate
), но я понятия не имею, как изменить его, чтобы он делал то, что я хочу.
У кого-нибудь есть мысли о том, как выяснить, какие kwargs
были заданы изначально при вызове s = SomeFactory()
? т.е. определить, что если я сказал s = SomeFactory(name='Matt')
, что пользователь вручную установил имя?
Спасибо!
Обновление: я использую django
версию 1.11.2
, factory_boy
версию 2.8.1
и python
версию 3.5.2
.