将功能应用于faker

时间:2015-12-17 20:25:33

标签: python factory factory-boy

所以我有一个像这样的对象:

class ContactPhoneFactory(factory.Factory):
    class Meta:
        model = ContactPhoneNumber

    number = Faker().phone_number()
    type = factory.Faker('random_element', elements=range(5))

我想将'formatted_number'函数应用于'number'

如果我申请:

number = formatted_number(Faker().phone_number())

它不会将函数应用于Faker的输出,它只是将Faker对象作为输入。延迟属性会导致同样的问题。如何将格式化功能应用于faker对象?

1 个答案:

答案 0 :(得分:1)

我自己(也在PhoneNumber工厂)遇到了一个非常类似的问题:我只是想将faker产生的数量限制为只有手机号码。

我刚刚实施了自己的faker提供商。这样做的另一个好处就是不会受到工厂男孩API变化的影响(faker对于工厂男孩来说仍然是一个新手)。

我认为它是这样的:

from faker.providers.phone_number import Provider as PhoneProvider

class MyPhoneProvider(PhoneProvider):
    @classmethod
    def formatted_phone_number(cls):
        return formatted_number(cls.phone_number())

factory.Faker.add_provider(MyPhoneProvider)

number = factory.Faker('formatted_phone_number')