4

カタログの結果を複数のフィールドで並べ替える必要があります。

私の場合、最初に年で並べ替え、次に月で並べ替えます。年と月のフィールドは、カスタム コンテンツ タイプ (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

誰か助けてくれませんか?

4

2 に答える 2

7

key並べ替えにパラメーターを使用することをお勧めします。

results.sort(key=lambda b: (b.item_publication_year, b.item_publication_month))

;を使用する代わりにsorted()組み込み関数を使用することもできます。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_yearitem_publication_monthカタログ メタデータに存在する必要があります。

于 2012-09-19T13:35:26.617 に答える
3

高度なクエリを使用してカタログ検索から直接複数の並べ替えを取得できます。公式ドキュメントも参照してください。

于 2012-09-19T14:04:37.233 に答える