我想以某种方式查询数据库,而不是仅仅按某个字段排序,而是为该字段的每个唯一值获取一个单独的查询集(或字典、列表等)。希望下面的例子能有所帮助:
假设一个模型像
Class Person(models.Model):
first_name = models.CharField()
last_name = models.CharField
调用 Person.objects.all().order_by('last_name') 会给我一个长查询集。我希望为每个唯一的姓氏都有一个单独的列表。因此,每个last_name =“Smith”的人都有一个列表,而每个last_name =“Nguyen”的人都有另一个列表,等等。
显然,我无法提前知道数据库中的姓氏是什么,也不知道有多少人会共享一个共同的姓氏。在 django 中是否有任何快速、高效或自动的方法来执行此操作,或者我只需要在取回一个大查询集后自己处理数据?
samy 的代码是正确的,但效率很低:您执行 n+1 次查询(其中 n 是唯一姓氏的数量)。由于无论如何您都会获取表中的所有对象,因此您不妨一次性完成。使用这个代替:
from collections import defaultdict
person_dict = defaultdict(list)
persons = Person.objects.all()
for person in persons:
person_dict[person.last_name].append(person)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)