django - Faker 使用 Factory Boy 创建的所有相等值
问题描述
在 Django 项目中使用 Factory Boy 和 Faker,我注意到使用 Factory Boy 创建的对象以及使用 Faker 创建名称(本示例中为公司名称)不会为新对象创建唯一名称。
主要问题:我们在将 Faker 用作单独的库(第一个示例)时使用它是错误的,还是 Factory Boy 的某些固有特性阻止了 Faker 在与 Factory Boy 一起使用时作为单独的库正常工作?
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')
解决方案
与 Django 表单和设置默认日期类似,该name
值是在首次定义类时设置的。
你需要使用LazyAttribute
name = factory.LazyAttribute(lambda _: fake.company())
推荐阅读
- azure - 使用 Simba 驱动程序将 ODBC 连接到 AzureDatabricks
- ubuntu - 为什么浏览器无法在 Nginx 上打开文件?
- reactjs - 是否可以在生产构建(webpack / craco)上更改样式表 URI?
- javascript - 更换减速机正确打字
- javascript - 使用我想知道这张照片是浏览过的还是用相机拍的
- javascript - 如何使用 Google App Scripts 从工作表名称创建字符串?
- excel - 如何从版本数组中返回最新文档版本的值?
- ios - 无法在 iOS 14 内联 DatePicker 中点击天数
- css - vh 和 vw 单位的缺点是什么?
- azure-sql-database - 如何在远程 Azure SQL Server 的视图中创建数据所在的视图