首页 > 解决方案 > Django 在 order_by 之后从字段中获取值

问题描述

在根据其中一个字段对模型进行排序后,我试图从字段中获取共享值。例如,我有一个名为Course

class Course(models.Model):

    code = models.CharField(max_length=100)
    university = models.CharField(max_length=100)
    instructor = models.CharField(max_length=100)

然后根据我的教练订购:

Course.objects.all().order_by('instructor').distinct('instructor')

然后会给我例如

  1. ABC123,Uni1,亚当森
  2. EFG456,Uni1,亚当森
  3. HIJ789,Uni1,詹姆斯
  4. KLM321, Uni1, 詹姆斯

如何将结果作为字典检索,其中键是讲师,值是模型对象的查询集?所以我会得到一些东西,比如:

result = {
"Adamson":<QuerySet[]>,
"James":<QuerySet[]>
}

我找不到这样做的聚合函数有没有办法使用单一方法来做到这一点?

标签: pythondjangodjango-models

解决方案


您可以使用模块 [python-doc]的groupby(…)函数 [python-doc]对数据进行后处理:itertools

from itertools import groupby
from operator import attrgetter

qs = Course.objects.all().order_by('instructor')

result = {
    k: list(vs)
    for k, vs in groupby(qs, attrgetter('instructor'))
}

推荐阅读