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()
?是的,上述情况也会发生