У меня проблемы с производительностью в Django из-за отношений m2m. У меня есть список объектов Something, которые все имеют Something_instance.item_set, поэтому я вызываю Something_instance.item_set.all () много раз. Я хотел бы кэшировать этот запрос в Something_instance, чтобы мне не нужно было выполнять так много запросов. Это возможно? (По сути, это хак для того, чтобы заставить select_related () работать на m2m).
EDIT:
Следующие 2 фрагмента показывают проблему, с которой я столкнулся. В views.py я запрашиваю отношения m2m.
for t in items:
try:
t.price = t.user_item_rel_set.get(user=u).payment_amount
except:
t.price = -1 * t.buyer_item_rel_set.get(buyer=u).payment_amount
return items
Также функция в моей модели:
def listBuyers(self):
return self.buyer_item_rel_set.all()
У меня есть это, потому что я использую это в своем шаблоне, чтобы получить информацию от этих элементов.
Запрос отношений m2m заканчивается дважды: один раз в views.py, а затем один раз в шаблоне. Я хотел бы получить набор запросов в представлениях, прикрепить его к экземпляру модели, а затем передать его в шаблон, чтобы он (и код views.py) использовал кэшированный набор запросов, вместо повторной выборки.