Cha*_*ukh 6 python django factory python-3.x faker
我正在尝试使用工厂和 faker 将数据插入我的数据库(sqlLite3)。
这是我的模型:
class User(models.Model):
id = models.CharField(max_length=9, primary_key=True)
real_name = models.CharField(max_length=200)
tz = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
型号工厂:
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
fake.add_provider(MyProvider)
real_name = factory.Faker('name')
id = ''.join(fake.random_letters(length=9)).upper()
tz = fake.timezone()
Run Code Online (Sandbox Code Playgroud)
当我UserFactory.create()第一次运行时,添加了 User ,但是当我在同一个 python shell 中第二次运行或尝试运行时UserFactory.create_batch(5),它给出了以下错误:
django.db.utils.IntegrityError: UNIQUE constraint failed: activities_user.id
如果我在不同的终端中运行它或从 shell 退出并再次运行相同的命令,它运行良好。
似乎''.join(fake.random_letters(length=9)).upper()总是返回相同的值。尽管我使用了 random_letters 我想知道为什么会发生这种情况。
我刚开始使用工厂男孩和伪造者。请帮我解决这个问题。如果我遗漏了什么,请告诉我。
小智 1
我认为您必须在类之外添加提供程序,并使用要作为参数运行的函数的名称来声明字段。请参阅下面的示例(来自factoryboy docs)。
发生的情况是,您的代码在声明类时仅运行一次,因此每次仅生成 1 个字符串。
factory.Faker.add_provider(SmileyProvider)
class FaceFactory(factory.Factory):
class Meta:
model = Face
smiley = factory.Faker('smiley')
Run Code Online (Sandbox Code Playgroud)
所以这里SmileyProvider会有一个名为 的方法smiley。
| 归档时间: |
|
| 查看次数: |
4349 次 |
| 最近记录: |