Как настроить последовательность для атрибута при использовании create_batch в Factory-Boy?Python

Программы на Python
Ответить
Anonymous
 Как настроить последовательность для атрибута при использовании create_batch в Factory-Boy?

Сообщение Anonymous »

Как этого добиться при использовании Factory_boy в Django?

models.py

Код: Выделить всё

class TestModel(models.Model):
name = CharField()
order = IntegerField()
recipes.py

Код: Выделить всё

class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = 0
tests.py

Код: Выделить всё

recipes.TestModelFactory.create_batch(4, order=+10)
или

Код: Выделить всё

recipes.TestModelFactory.create_batch(4, order=seq(10))
или что-то в этом роде, чтобы добиться такого результата:

Код: Выделить всё

TestModel.objects.all().values_list('order', flat=True)

[10, 20, 30, 40]
ОБНОВЛЕНИЕ

Спасибо @trinchet за идею. Поэтому я думаю, что одним из решений будет:

Код: Выделить всё

class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = factory.Sequence(lambda n: n * 10)
Но это всегда будет устанавливать последовательности для всех моих объектов, и я не смогу устанавливать нужные значения.

Обходной путь:

Код: Выделить всё

class TestModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = TestModel

name = factory.LazyAttribute(lambda o: faker.word().title())
order = 0
И дальше в тестах:

Код: Выделить всё

    recipes.MenuItemFactory.reset_sequence(1)

recipes.MenuItemFactory.create_batch(
4,
parent=self.section_menu,
order=factory.Sequence(lambda n: n * 10)
)
Что даст мне тот результат, который я хочу. Но это сбрасывает все последовательности. Я хочу, чтобы он мог динамически устанавливать последовательность только для порядка.

Подробнее здесь: https://stackoverflow.com/questions/521 ... actory-boy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»