У меня есть функция
def selected_location_equipment(self):
qs = (Equipment.objects
.prefetch_related('service_logs')
.all())
return qs
Это возвращает набор запросов с несколькими связанными полями.
Проблема в том, что когда я получаю доступ к предварительно выбранным данным позже в моем коде, он выполняется снова запрос.
Я просмотрел код Django и вижу, где он проверяет кеш на наличие .all() в одном месте и не выполняет запрос, но затем, когда он вызывается здесь, это почти похоже на очистку кеша.
На панели инструментов отладки также отображается запрос для каждой итерации цикла.
for e in equipments:
last_service = list(e.service_logs.all())[-1]
for log in e.service_logs.all():
# do other stuff
...
Вот базовое определение модели оборудования.
class ServiceLog(models.Model):
equipment = models.ForeignKey(Equipment,
on_delete=models.CASCADE,
related_name='service_logs')
Подробнее здесь: https://stackoverflow.com/questions/790 ... ll-queries