Factoryboy не может создать поле, зависящее от базы данных

Я использую django-cities-light для хранения местоположений пользователей. Однако мне нужно импортировать огромный набор данных стран и городов в базу данных.

Я использую Factory классы как для тестирования, так и для создания фиктивных данных на сайте.

Как я могу создать фабрику, которая будет автоматически заполнять эти поля во время тестирования?

Когда не тестирую, фабрика работает правильно Country.objects.all(). Но при тестировании база данных пуста и не может найти ни одной страны: IndexError: Cannot choose from an empty sequence.

Каким должен быть правильный подход для таких случаев? Если у вас есть лучшее решение, чем использование LazyAttributes ниже, дайте мне знать о лучшем подходе.

class UserProfileFactory(DjangoModelFactory):
    class Meta:
        model = UserProfile

    # ...


    birth_country = FuzzyChoice(Country.objects.all()) or None
    birth_region = factory.LazyAttribute(
        lambda o: o.birth_country.region_set.order_by("?").first()
    )
    birth_subregion = factory.LazyAttribute(
        lambda o: o.birth_region.subregion_set.order_by("?").first()
    )
    birth_city = factory.LazyAttribute(
        lambda o: o.birth_region.city_set.order_by("?").first()
    )

Вернуться на верх