factory_boy 提取原始 kwargs

factory_boy extract original kwargs

我正在用 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')

到目前为止我试过的是

我认为我想要的很多功能在 factory_boyStepBuilder 中被黑盒化了(我怀疑它在 instantiate 方法中)但是我有不知道如何修改它来做我想做的事。

有没有人想过如何找出 s = SomeFactory() 的调用中最初设置了哪些 kwargs? IE。确定如果我说s = SomeFactory(name='Matt'),那是用户手动设置的名字?

谢谢!

更新:我是 运行 django 版本 1.11.2factory_boy 版本 2.8.1python 版本 3.5.2

您可以覆盖 create 方法以仅获取用户关键字。

一个完整的例子是这样的:

from django.contrib.auth.models import User
import factory


class UserFactory(factory.DjangoModelFactory):
    username = factory.Sequence(
        lambda n: 'test'
    )
    email = factory.Sequence(lambda n: 'user{0}@example.com'.format(n))

    class Meta:
        model = User

    @classmethod
    def create(cls, **kwargs):

        # here you'll only have the kwargs that were entered manually

        print(str(kwargs))

        return super(UserFactory, cls).create(**kwargs)

所以当我调用它时:

In [2]: UserFactory(username='foobar')
{'username': 'foobar'}
Out[2]: <User: foobar>

如果您想为 create 以外的其他构建策略捕获 kwargs,您还需要为 stubbuild 方法执行此操作。