Python 如何使用Factory Boy为模型字段生成随机数

Python 如何使用Factory Boy为模型字段生成随机数,python,django,factory-boy,Python,Django,Factory Boy,我需要使用创建一些虚假数据。我有以下型号: class Fabric(models.Model): title = models.CharField(max_length=200, blank=True) description = models.CharField(max_length=200, blank=True) price = models.DecimalField(decimal_places=2, max_digits=10, null=True, blan

我需要使用创建一些虚假数据。我有以下型号:

class Fabric(models.Model):
    title = models.CharField(max_length=200, blank=True)
    description = models.CharField(max_length=200, blank=True)
    price = models.DecimalField(decimal_places=2, max_digits=10, null=True, blank=False)
我需要创建一个基于此模型的工厂,我希望价格有一个介于1和100之间的随机值

class FabricFactory(DjangoModelFactory):
    class Meta:
        model = Fabric

    title = factory.Faker('name')
    description = factory.Faker('catch_phrase')
    price = random.randrange(MIN_PRICE, MAX_PRICE + 1)

问题是我每次都会得到相同的价格。

我可以通过使用factory.LazyAttribute来解决这个问题。从文档中:

大多数factory属性都可以使用静态值添加,这些静态值在定义factory时进行计算,但某些属性(例如,从其他元素计算值的字段)需要在每次生成实例时指定值


我可以通过使用factory.LazyAttribute来解决这个问题。从文档中:

大多数factory属性都可以使用静态值添加,这些静态值在定义factory时进行计算,但某些属性(例如,从其他元素计算值的字段)需要在每次生成实例时指定值

就我而言,懒散属性不起作用

我发现使用factory boy生成10位随机数的最佳方法如下:

import factory.fuzzy

class CustomUserFactory(DjangoModelFactory):
        phone_number = factory.fuzzy.FuzzyInteger(9000000000, 9999999999)
FuzzyInteger中提供的参数是生成随机数的下限和上限。

在我的例子中,LazyAttribute不起作用

我发现使用factory boy生成10位随机数的最佳方法如下:

import factory.fuzzy

class CustomUserFactory(DjangoModelFactory):
        phone_number = factory.fuzzy.FuzzyInteger(9000000000, 9999999999)

FuzzyInteger中提供的参数是生成随机数的下限和上限。

如果我理解正确,我对factory_boy没有任何经验,它是一个可以重复使用的夹具,它似乎只被实例化一次,而这个fixture的范围就是您的整个会话。有没有办法在factory_boy中修改夹具的范围?试试。@KlausD.,我想到了这个选项,但使用惰性属性似乎更简单。@aws_Approve,谢谢你的提示。这绝对是使用惰性属性所做的。很高兴你能理解:拇指:如果我理解正确,我对factory_boy没有任何经验,它是一个可重用的装置,似乎只实例化一次,这个装置的范围是你的整个会话。有没有办法在factory_boy中修改夹具的范围?试试。@KlausD.,我想到了这个选项,但使用惰性属性似乎更简单。@aws_Approve,谢谢你的提示。这绝对是使用惰性属性所能做到的。很高兴你找到了答案:拇指:在我的例子中,我需要使用lambda函数number_field=factory.LazyAttributelambda x:random.randrange0,10000在我的例子中,我需要使用lambda函数number_field=factory.LazyAttributelambda x:random.randrange0,10000