如何在Django中使用factory和faker生成唯一数据?

问题描述 投票:1回答:1

我正在尝试使用factory和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)

模型的工厂:

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()

[当我第一次运行UserFactory.create()时,添加了用户,但是当我第二次在同一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,我也不知道为什么会这样。

我是初次使用工厂男孩和假货的人。请帮助我。让我知道我是否有任何遗漏。

python django python-3.x factory faker
1个回答
0
投票

我认为您必须在类之外添加提供程序,并使用要作为参数运行的函数的名称声明字段。请参见下面的示例(来自factoryboy docs

factory.Faker.add_provider(SmileyProvider)

class FaceFactory(factory.Factory):
    class Meta:
        model = Face

    smiley = factory.Faker('smiley')

所以这里SmileyProvider将有一个名为smiley的方法。

© www.soinside.com 2019 - 2024. All rights reserved.