【发布时间】:2016-10-30 18:30:42
【问题描述】:
假设我有这个模型:
class Student(models.Model):
class_name = models.CharField()
mark = models.IntegerField()
而且我想获得班上所有mark 最高的学生。我可以找到所有课程中mark 最高的学生,就像this post 中提到的那样。但我希望所有具有最高mark 的学生在他们的班级,像这样:
Student.objects.annotate(
highest_mark_in_class=Max(
Students.objects.filter(class_name=F('class_name'))
.filter(mark=highest_mark_in_class)
)
)
我可以使用for 循环来做到这一点,但使用大型数据库for 循环相当慢。不知道这样的查询能不能写成一行?
【问题讨论】:
标签: python django django-orm django-annotate