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()
)