我需要使用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, 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)
问题在于,我总是为每个实例获得相同的价格。
答案 0 :(得分:2)
我能够通过使用lazy attribute(factory.LazyAttribute
)来解决此问题。从文档中:
大多数工厂属性都可以使用定义工厂时要评估的静态值来添加,但是某些属性(例如,其值是从其他元素计算得出的字段)在每次生成实例时都需要分配值。
class FabricFactory(DjangoModelFactory):
class Meta:
model = Fabric
title = factory.Faker('name')
description = factory.Faker('catch_phrase')
price = factory.LazyAttribute(random.randrange(MIN_PRICE, MAX_PRICE + 1))
答案 1 :(得分:0)
就我而言,LazyAttribute
不起作用。
我发现使用 factory boy 生成 10 位随机数的最佳方法是这样的:
import factory.fuzzy
class CustomUserFactory(DjangoModelFactory):
phone_number = factory.fuzzy.FuzzyInteger(9000000000, 9999999999)
FuzzyInteger()
中提供的参数是生成随机数的下限和上限。
答案 2 :(得分:0)
您也可以使用 python 提供程序。
class MyModel(factory.django.DjangoModelFactory)
number_field = factory.Faker('pyint', min_value=0, max_value=1000)
class Meta:
model = SomeModel