Получение всех объектов модели с полем ForeignKey приводит к медленному и большому количеству вызовов запроса
При использовании ModelChoiceField я передаю все объекты через
brand = forms.ModelChoiceField(queryset=MobileModel.objects.all())
Модель выглядит следующим образом:
class MobileModel(models.Model):
brand = models.ForeignKey(MobileBrand, on_delete=models.PROTECT, blank=True, null=True)
....
При проверке отладчиком я вижу, что SQL запрос вызывается для каждой строки мобильной модели для получения бренда.
Что для больших записей приводит к огромным SQL-запросам.
Как решить ее и сократить SQL-запросы с внешним ключом.
Чтобы уменьшить количество вызовов запроса и получить все значения внешних ключей, мне пришлось использовать select_related
Набор запросов становится таким:
mobile_models_all = MobileModel.objects.select_related('brand').all()
В итоге я сократил количество запросов с 3000 до 7!