gpt4 book ai didi

Django - 反向查找

转载 作者:行者123 更新时间:2023-12-04 06:20:38 24 4
gpt4 key购买 nike

例如,我有这些模型:

class Person(models.Model):
name = models.CharField(max_length=20)
employer = models.CharField(max_length=20)

class Car(models.Model):
person = models.ForeignKey(Person)
name = models.CharField(max_length=10)
model = models.CharField(max_length=10)
...

我想让所有拥有特定汽车的人:
people = Person.objects.filter(car__name="Toyota")

现在我想写下这些人关于他们自己汽车的详细信息。我可以做这个:
for person in people:
...
cars = person.car_set.filter(name="Toyota")
...

但它再次击中了数据库。我怎样才能避免这种情况?有没有办法更简单地做到这一点?

最佳答案

选车名时先选车及相关人员

cars = Car.objects.select_related("person").filter(name="Toyota").order_by("person")

现在,您拥有了所有名称为 toyota 的汽车以及该汽车的负责人,ordered_by 人。

现在使用 python itertools.groupby 为每个人分组这个列表
from itertools import groupby
for k, g in groupby(cars, lambda x: x.person):
person = k
cars = list(g)

现在在那个迭代中你有这个人和他的车(名字是“丰田”)。
您会注意到只有一个查询发生,然后对缓存的信息执行以下操作。

关于Django - 反向查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6628331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com