拆分查询集或按字段获取多个查询集,而不仅仅是按字段排序

2024-01-20

我想以某种方式查询数据库,而不是仅仅按某个字段排序,而是为该字段的每个唯一值获取一个单独的查询集(或字典、列表等)。希望下面的例子能有所帮助:

假设一个模型像

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(使用前将#替换为@)

拆分查询集或按字段获取多个查询集,而不仅仅是按字段排序 的相关文章

随机推荐