У меня есть некоторый код Django 1.3, который просматривает множество экземпляров модели в цикле, т. Е.
my_set = myinstance.subitem_set.all()
for value in values:
existing = my_set.filter(attr_name=value)
if len(existing) == 1:
...
Это работает, но профилирование SQL-запросов показывает, что оно обращается к БД на каждой итерации. Согласно https://docs.djangoproject.com/en/1.3/ref/models/querysets/ итерации по связанным элементам должны охотно загружать их, поэтому я попытался позвонить:
list(my_set)
Однако это не помогает. Он выполняет запрос для загрузки всех подпунктов, но затем все равно выполняет отдельный запрос для каждого подпункта внутри цикла. Как заставить его использовать кэшированный набор и не каждый раз попадать в БД? БД - это PostgreSQL 8.4.