Python Django筛选器基于多个条件在order_之后返回重复项

Python Django筛选器基于多个条件在order_之后返回重复项,python,django,Python,Django,根据我的标准和顺序,我很难返回唯一的Clazz对象Clazz和Session是两个独立的模型,一个类可以有多个会话 一旦我引入了order\u by我就看到了重复的Clazz对象。如何删除重复项?一个简单的distinct()似乎不起作用 classes = Clazz.objects.filter(location=loc).distinct().order_by('session__start_date', 'session__end_date') 在@Alasdair的回应之后,他只是这

根据我的标准和顺序,我很难返回唯一的
Clazz
对象
Clazz
Session
是两个独立的模型,一个类可以有多个会话

一旦我引入了
order\u by
我就看到了重复的
Clazz
对象。如何删除重复项?一个简单的
distinct()
似乎不起作用

classes = Clazz.objects.filter(location=loc).distinct().order_by('session__start_date', 'session__end_date')

在@Alasdair的回应之后,他只是这样做了:

dup_list = []
class_list = []
for c in classes:
    if c not in dup_list:
        dup_list.append(c)
        class_list.append(c)
classes = class_list

我想你可以这样做:

classes = Clazz.objects.filter(location=loc).annotate(
        startdate=Max('session__start_date'),
        end_date=Max('session__end_date')
    ).order_by('startdate', 'end_date')

如果您在
会话
模型上按属性排序,并且一个类有多个会话,那么对于每个会话,它将在查询集中显示一次。这是(见注释)。另见。您不能只返回一次每个
Clazz
,您会使用哪些相关的
session
?您是否每次都尝试
classes=Clazz.objects.filter(location=loc)。order\u by('session\u开始日期','session\u结束日期')。distinct()
?是的,上述情况也会发生