【发布时间】:2017-06-09 13:34:28
【问题描述】:
我们对 order_by/distinct 字段有限制。 来自docs:“order_by()中的字段必须以distinct()中的字段开头,顺序相同”
现在是用例:
class Course(models.Model):
is_vip = models.BooleanField()
...
class CourseEvent(models.Model):
date = models.DateTimeField()
course = models.ForeignKey(Course)
目标是获取课程,按最近的日期排序,但 vip 优先。
解决方案可能如下所示:
CourseEvent.objects.order_by('-course__is_vip', '-date',).distinct('course_id',).values_list('course')
但由于限制,它会导致错误。
是的,我明白为什么在使用 distinct 时需要排序 - 我们为 course_id 的每个值获取第一行,因此如果我们不指定顺序,我们会得到一些任意行。 但是将顺序限制在我们不同的同一领域的目的是什么?
如果我将 order_by 更改为 ('course_id', '-course__is_vip', 'date',) 它会给我一行课程,但课程的顺序与目标没有任何共同之处。
除了遍历整个查询集并循环过滤之外,还有什么方法可以绕过这个限制?
【问题讨论】:
标签: python django postgresql