Взгляните на эту модель (она гипотетическая):
class Manufacturer(models.Model):
#...
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
#...
class City(models.Model):
#...
class Manager(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
city = models.ForeignKey(City)
#...
Я хочу запросить: список автомобилей и менеджеров их производителей (с учетом нескольких условий, которые не имеют значения в данном вопросе), а также их города. Это можно как-то сделать с помощью следующего кода:
manager_car = defaultdict(list)
cars = Car.objects.select_related('manufacturer').filter(...)
for car in cars:
managers = car.manufacturer.manager_set.select_related('city').filter(...)
for manager in managers:
#if <optional condition>:
manager_car[manager].append(car)
Перечислю в словаре автомобили производителя по менеджерам, чего я и хочу. Однако этот код, очевидно, выполняет столько же запросов, сколько машин в базе данных.
Как выбрать все эти экземпляры одновременно?