[在Django项目中使用Factory Boy和Faker,我注意到使用Factory Boy创建的对象并使用Faker创建名称(在此示例中为公司名称)不会为新对象创建唯一名称。
主要问题:在将Faker用作单独的库时,我们是否使用Faker错误(第一个示例),或者与Factory一起使用时,Factory Boy本身是否存在某些固有的问题,无法阻止Faker用作单独的库?男孩?
import factory
...
from faker import Faker
from faker.providers import company
...
fake = Faker('nl_NL')
fake.add_provider(company)
class PolicyBrandFactory(factory.django.DjangoModelFactory):
class Meta:
model = PolicyBrand
name = fake.company()
结果(Pycharm调试器屏幕截图):(关键点是非唯一的公司名称)
在Factory Boy文档中,我读到他们在Faker周围有一个包装纸,使用它我得到了独特的结果:
import factory
...
class PolicyBrandFactory(factory.django.DjangoModelFactory):
class Meta:
model = PolicyBrand
name = factory.Faker('company', locale='nl_NL')
您正在使用类变量。定义类时,将定义name = factory.LazyAttribute(lambda _: fake.company())
,以单次调用name
fake.company()
[如果这是一个简单的Django模型,我希望必须重写class PolicyBrandFactory(factory.django.DjangoModelFactory):
class Meta:
model = PolicyBrand
name = fake.company()
,但我对__init__
以及它可能执行的元分类魔术一无所知。
在factory_boy中使用Faker的受支持方法是通过factory.django.DjangoModelFactory
帮助程序:
factory.Faker
这还将把Faker的随机种子管理与factory_boy的随机种子联系起来。
如果您要没有帮助者,则必须使用其中一个懒惰的帮助者:
factory.Faker