Python Django postgres按字段上的不同顺序排列

Python Django postgres按字段上的不同顺序排列,python,django,postgresql,Python,Django,Postgresql,我们对order_by/distinct字段有限制。 从:“按顺序排列的字段必须以distinct()中的字段开头,顺序相同” 下面是用例: class Course(models.Model): is_vip = models.BooleanField() ... class CourseEvent(models.Model): date = models.DateTimeField() course = models.ForeignKey(Course)

我们对order_by/distinct字段有限制。 从:“按顺序排列的字段必须以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时排序是必要的——我们得到每个值的第一行,当然,如果我们不指定顺序,我们会得到一些任意的行。 但是,将顺序限制在我们所研究的同一领域的目的是什么呢

如果我将order_by更改为类似('course_id','-course__是'u vip','date',),它将为课程提供一行,但课程顺序与目标没有任何共同之处


除了遍历整个查询集并在循环中对其进行过滤外,还有什么方法可以绕过此限制?

您可以使用
中的
id\u使用嵌套查询。在内部查询中选择不同的事件,在外部查询中自定义它们的顺序:

CourseEvent.objects.filter(
    id__in=CourseEvent.objects\
        .order_by('course_id', '-date').distinct('course_id')
).order_by('-course__is_vip', '-date')
不同(*字段)
上的文档:

指定字段名时,必须在QuerySet中提供order_by(),order_by()中的字段必须以distinct()中的字段开头,顺序相同


不,那会给我按课程id,而不是按最近的日期和vip标志订购的课程。第二个订单将不会有帮助,因为我们已经丢失了关于日期的信息,因为我们打了不同的电话。不,你没有。没有第二个
order\u by
。您拥有每个
课程id
的所有最新记录。每个嵌套查询中都有一个order子句是的,但是.order_by('course_id','-course_u u is_vip','-date')与.order_by('course_id',)完全相同,因为id是唯一的。所以我们从来没有这个信息不,
id
对于
CourseEvent
是唯一的,
courseid
不是!多个事件可以指向同一路线。我承认,
课程是vip
是多余的。已更新,已删除外部订单中的错误项目