我正在尝试使用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,我也不知道为什么会这样。
我是初次使用工厂男孩和假货的人。请帮助我。让我知道我是否有任何遗漏。
我认为您必须在类之外添加提供程序,并使用要作为参数运行的函数的名称声明字段。请参见下面的示例(来自factoryboy docs)
factory.Faker.add_provider(SmileyProvider)
class FaceFactory(factory.Factory):
class Meta:
model = Face
smiley = factory.Faker('smiley')
所以这里SmileyProvider
将有一个名为smiley
的方法。