2010-10-05 57 views
1

我想做一個查詢,用戶可能會或可能不會選擇一個過濾器,但我不想創建2個索引(表)。AppEngine:查詢數據存儲的條件爲特定屬性的條件

value=self.request.get('filter') 
if value: 
    results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').filter('filter_property =',value) 
else: 
    results=Entity.all().filter('p1 =','v1').filter('p2 =','v2') 

我可以訂購filter_property。這樣在最後一行:

results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').order('filter_property') 

這將是壞的,如果我可以或不可以過濾P1(property1)和P2(property2)。我想這樣做:

value = self.request.get('filter') 
if value: 
    operator = '=' 
else: 
    operator = '!=' 
results=Entity.all().filter('p1 =','v1').filter('p2 =','v2').filter('filter_property '+operator,value).order('p4') 

「.order( 'P4')」 將失敗BadArgumentError與操作數=!

我該怎麼辦?

回答

0

這聽起來像你已經很好地處理了替代方案。如果您希望數據存儲爲每個數據存儲使用相同的索引,則可以添加訂單子句來替換過濾器;否則,你堅持有多個索引。