Как указать базу данных для Factory Boy?

Кажется, что FactoryBoy всегда создает экземпляры в базе данных по умолчанию. Но у меня следующая проблема.

cpses = CanonPerson.objects.filter(persons__vpd=6,
                                   persons__country="United States").using("global")

Код указывает на базу данных global. Я не нашел способа указать базу данных в фабрике:

class CanonPersonFactory(django_factory.DjangoModelFactory):
    class Meta:
        model = CanonPerson
        django_get_or_create = ('name_first', 'p_id')
    p_id = 1
    name_first = factory.Sequence(lambda n: "name_first #%s" % n)

    @factory.post_generation
    def persons(self, create, extracted, **kwargs):
        if not create:
            # Simple build, do nothing.
            return

        if extracted:
            # A list of groups were passed in, use them
            for person in extracted:
                self.persons.add(person)

person Houman    schedule 24.10.2014    source источник


Ответы (2)


Похоже, что Factory Boy не предоставляет эту функцию из коробки, но вы можете легко добавить ее вручную:

class CanonPersonFactory(django_factory.DjangoModelFactory):
    class Meta:
        model = CanonPerson
    ...
    @classmethod
    def _get_manager(cls, model_class):
        manager = super(CanonPersonFactory, cls)._get_manager(model_class)
        return manager.using('global')
    ...
person Alex Lisovoy    schedule 24.10.2014
comment
Работает как шарм. Спасибо - person Houman; 27.10.2014

Теперь это напрямую поддерживается добавлением атрибута database к Meta:

class CanonPersonFactory(django_factory.DjangoModelFactory):
    class Meta:
        model = CanonPerson
        database = 'global'

    ...
person eLRuLL    schedule 13.02.2018