我需要按多个字段对目录结果进行排序。
就我而言,先按年份排序,然后按月份排序。年份和月份字段包含在我的自定义内容类型中(分别为item_publication_year
和item_publication_month
)。
但是,我没有得到我想要的结果。年份和月份根本没有订购。它们应按降序排列,即2006年,2005年,2004年等。
以下是我的代码:
def queryItemRepository(self):
"""
Perform a search returning items matching the criteria
"""
query = {}
portal_catalog = getToolByName(self, 'portal_catalog')
folder_path = '/'.join( self.context.getPhysicalPath() )
query['portal_type'] = "MyContentType"
query['path'] = {'query' : folder_path, 'depth' : 2 }
results = portal_catalog.searchResults(query)
# convert the results to a python list so we can use the sort function
results = list(results)
results.sort(lambda x, y : cmp((y['item_publication_year'], y['item_publication_year']),
(x['item_publication_month'], x['item_publication_month'])
))
return results
有人愿意帮忙吗?
答案 0 :(得分:7)
更好的选择是使用key
参数进行排序:
results.sort(key=lambda b: (b.item_publication_year, b.item_publication_month))
您也可以使用sorted()
built-in function代替list()
;它会为你返回一个排序列表,这与Python在结果上首先调用list
的工作量相同,然后排序,就像调用sorted
一样:
results = portal_catalog.searchResults(query)
results = sorted(results, key=lambda b: (b.item_publication_year, b.item_publication_month))
当然,item_publication_year
和item_publication_month
都需要出现在目录元数据中。
答案 1 :(得分:3)
您可以使用advanced query直接从目录搜索中获得多个排序,另请参阅its official docs