factory-boy создать список SubFactory для Factory

Я использую django 1.6 и factory-boy.

class UserFactory(factory.Factory):
   class Meta:
      model = models.User

   username = factory.Sequence(lambda n: 'user%d' % n)

Здесь username — это простая CharField модель. Так что каждый раз, когда я звоню UserFactory(), я сохраняю и получаю уникальный объект с именем пользователя.

В фабричном мальчике я могу использовать factory.SubFactory(SomeFactory).

Как я могу создать список SomeFactory в ParentOfSomeFactory?

Итак, если я вызову ParentOfSomeFactory(), я создам список SomeFactory, а также базу данных ParentOfSomeFactory.


person Saiful Azad    schedule 09.11.2016    source источник
comment
Просто чтобы убедиться, что даже если вы создаете список подфабрик, тип поля по-прежнему не является полем типа списка, как вы хотели с этим справиться? в вашем примере, что бы вы сделали, если бы lambda возвращал список?   -  person Or Duan    schedule 09.11.2016
comment
что бы вы сделали, если бы лямбда вернула список? Так что, если я вызову ParentOfSomeFactory(), он автоматически создаст и сохранит список моделей SomeFactory в базе данных. Я не хочу создавать его вручную.   -  person Saiful Azad    schedule 09.11.2016


Ответы (2)


Используйте factory.List:

class ParentOfUsers(factory.Factory):
    users = factory.List([
        factory.SubFactory(UserFactory) for _ in range(5)
    ])
person Paul    schedule 15.03.2018

Вы можете предоставить список с помощью factory.Iterator.

import itertools
import factory

# cycle through the same 5 users
users = itertools.cycle(
    (UserFactory() for _ in range(5))
)

class ParentFactory(factory.Factory):
    user = factory.Iterator(users)
person Ryan Ginstrom    schedule 06.08.2017