2012-06-08 28 views
0

我使用的是Google App Engine和Python,並且我正在構建一項功能,允許用戶按照投票數量或creation_date排列他們的照片。在DateTimeProperty上找不到匹配索引Google App Engine

的模型應該像這樣:

class MyUser(db.Model): 
    user = db.UserProperty(required=True) 
    name = db.StringProperty() 
class UserImage(db.Model): 
    user = db.ReferenceProperty(MyUser,collection_name='user_images') 

    image_key = blobstore.BlobReferenceProperty(required=False) 
    creation_date = db.DateTimeProperty(required=True,auto_now_add=True) 
    votes = db.IntegerProperty(required=False) 

兩個查詢我想運行:

my_user = db.get('my_user_key') 
1) image_keys = my_user.user_images.order('-votes').fetch(100,keys_only=True) 
2) image_keys = my_user.user_images.order('-creation_date').fetch(100,keys_only=True) 

第一個查詢運行得很好,但第二個給我NeedIndexError:找不到匹配的索引即使將這些屬性添加到index.yaml

這裏是我的index.yaml中

indexes: 
- kind: UserImage 
    properties: 
    - name: user 
    - name: votes 
    direction: desc 
    - name: creation_date 
    direction: desc  

谷歌應用程序引擎控制檯告訴我,所有索引服務現在。


UPDATE

我在index.yaml中實際訂單寫道通過表決然後通過CREATION_DATE。正如Dragonx所建議的那樣。我將它們分開,並按預期工作。


感謝

回答

1

嘗試單獨的索引

indexes: 
- kind: UserImage 
    properties: 
    - name: user 
    - name: votes 
    direction: desc 

- kind: UserImage 
    properties: 
    - name: user 
    - name: creation_date 
    direction: desc  
+0

它完美。謝謝@dragonx –

+1

請記住,當你放入()時,這也會使寫入次數增加一倍,因此稍後不要抱怨你的應用程序花費太多了:) – alex

相關問題