Как сгенерировать случайное число для поля модели с помощью Factory Boy - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно создать поддельные данные, используя 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)

Проблема в том, что я всегда получаю одинаковую цену за каждый экземпляр.

1 Ответ

2 голосов
/ 30 апреля 2019

Мне удалось выяснить эту проблему с помощью атрибута lazy (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))
...