【发布时间】:2010-09-21 18:36:36
【问题描述】:
看看这个模型(这是假设的):
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)
会在字典中按经理列出制造商的汽车,这正是我想要的。但是,这段代码显然运行了与数据库中的汽车一样多的查询。
如何一次选择所有这些实例?
【问题讨论】:
标签: django django-queryset django-select-related