Встроенные наборы форм и поля выбора Django генерируют слишком много запросов к базе данных

У меня есть модель с несколькими полями внешнего ключа, например. модель Продукт с полями «тип», «уровень», «цвет», «интенсивность» (просто общий пример).

Затем у меня есть страница для редактирования всех продуктов данного типа с использованием формы Type с продуктами в виде встроенного набора форм с возможностью добавления дополнительных встроенных продуктов с помощью extra=10.

Что я нахожу очень странным, так это то, что каждый раз, когда я вывожу одно из полей выбора внешнего ключа в шаблоне, Django запрашивает базу данных для получения опций (каждый раз).

Например:

{% for form in formset %}
    {{ form.level }}
    {{ form.color }}
    {{ form.intensity }}
{% endfor %}

При 20 продуктах (и 10 пустых дополнительных формах) приведенный выше код выдает 30 выберите * из ...из уровня, цвета и интенсивности, всего 90 запросов (выявлено с помощью панели инструментов отладки Django), где 3 должно быть достаточно. Параметры вряд ли изменятся в середине запроса, но даже если бы они изменились, я определенно не хотел бы, чтобы некоторые недавно добавленные параметры появлялись только в последних 5 формах.

Есть ли способ оптимизировать мои модели/формы/представления/шаблоны, чтобы база данных не забивалась без необходимости?

-

Отказ от ответственности: я относительно новичок в django и python и не могу отделаться от мысли, что должен быть какой-то встроенный способ решить эту проблему.

7
задан jpic 24 March 2012 в 09:46
поделиться