Получение всех объектов модели с полем 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!

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