Python 如何使用来自工厂的假冒产品

Python 如何使用来自工厂的假冒产品,python,django,factory,faker,factory-boy,Python,Django,Factory,Faker,Factory Boy,Factory\u boy使用fake Factory(Faker)生成随机值,我想在Django测试中直接使用Faker生成一些随机值 Factory\u boy docs建议使用Factory.Faker及其提供商: class RandomUserFactory(factory.Factory): class Meta: model = models.User first_name = factory.Faker('first_name') 但这不会生成

Factory\u boy
使用
fake Factory(Faker)
生成随机值,我想在Django测试中直接使用Faker生成一些随机值

Factory\u boy docs建议使用
Factory.Faker
及其提供商:

class RandomUserFactory(factory.Factory):
    class Meta:
        model = models.User

    first_name = factory.Faker('first_name')
但这不会生成任何名称:

>>> import factory
>>> factory.Faker('name')
<factory.faker.Faker object at 0x7f1807bf5278>
>>> type(factory.Faker('name'))
<class 'factory.faker.Faker'>
有没有其他方法可以使用
Faker
而不是直接从
Faker
设置实例

from faker import Factory
fake = Factory.create()
fake.name()

您可以将faker与factory_boy一起使用,如下所示:

class RandomUserFactory(factory.Factory):
    class Meta:
        model = models.User

    first_name = factory.Faker('first_name')

user = RandomUserFactory()

print user.first_name
# 'Emily'
所以你需要用factory_boy实例化一个用户,它会为你调用Faker

我不知道你是不是想用这个来对付Django, 但是如果希望工厂将创建的用户保存到数据库中,
然后您需要扩展factory.django.DjangoModelFactory而不是factory.factory。

我知道这是一个老问题,但对于任何可能遇到此问题的人,这里有另一种方法可以使用

>>来自factory.faker导入faker
>>>FAKE=faker.faker()
>>>假的名字()
“斯科特·罗德里格斯”
>>>假地址
'PSC 5061,邮箱1673\nAPO AP 53007'
>>>

UPD您通常应该选择其中一种,因为这一种使用私有接口,
generate()
解决方案仅适用于
factory boy首先,如果您想将
factory\u boy
与Django模型一起使用,您应该按原样使用
DjangoModelFactory

其次,
factory\u boy
还可以使用
Faker
属性声明,以便轻松定义外观逼真的工厂。()

类RandomUserFactory(factory.DjangoModelFactory):
类元:
model='myapp.User'#相当于model=myapp.models.User
first\u name=factory.Faker('first\u name'))
定义工厂后,您只需按如下方式使用它:

o=RandomUserFactory() >>>o.名字 提姆
这就是我问这个问题时想知道的。我想
来自工厂。假货进口假货
也不例外。从再现性的角度来看,我认为最好使用
工厂男孩自己创建的实例。不幸的是,这在以后的伪造版本中不再有效。@jaywink Good catch,更新了答案。
class RandomUserFactory(factory.Factory):
    class Meta:
        model = models.User

    first_name = factory.Faker('first_name')

user = RandomUserFactory()

print user.first_name
# 'Emily'
import factory
print(factory.Faker('random_int').generate({}))
print(factory.Faker._get_faker().random_int())