django模型orm进行group by
Posted songbird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django模型orm进行group by相关的知识,希望对你有一定的参考价值。
场景:三个模型分别为教师,学生,课程。一个教师可主讲多门课程,但一门课程只能由一个教师主讲,即教师和课程是一对多的关系。一个学生可选多门课程,一门课程可被多个学生选,即学生和教师为多对多的关系。
class Teacher(models.Model): name = models.CharField(max_length=20, verbose_name=‘教师姓名‘) def __unicode__(self): return self.name class Student(models.Model): name = models.CharField(max_length=20, verbose_name=‘学生姓名‘) def __unicode__(self): return self.name class Course(models.Model): name = models.CharField(max_length=20, verbose_name=‘课程名‘) teacher = models.ForeignKey(Teacher, verbose_name=‘主讲人‘) student = models.ManyToManyField(Student, verbose_name=‘选课学生‘) def __unicode__(self): return self.name
选取某教师主讲的pk最小的课:
Teacher.objects.annotate(Min(‘course__pk‘)).get(pk=2).course__pk__min
多对多也一样
这个例子不太典型,比如快递和其状态两张表是一对多关系,查最新的状态就可以使用这种方法(也可以在有新的状态时在快递表中每次更新最新的状态)
以上是关于django模型orm进行group by的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django orm 中使用 Annotation 进行嵌套 Group By?
Django ORM 查询 GROUP BY 由 MAX 组合的多个列
Django ORM group by,并找到每个组的最新项目(窗口函数)
使用SQL语言了解Django ORM中的分组(group by)和聚合(aggregation)查询