2011-01-28 31 views
0

這是跟我的previous question如何篩選()不同的項目?

我使用的是相同的模型

class Item(db.Model): 
    ... 
    glam = db.StringProperty() 
    casual = db.StringProperty() 
    speaking = db.StringProperty() 

,並假設我有2個項目和1個被標記「華麗」的其他標記的「說」。

如果我篩選這樣

query.filter("glam", "glam") 
    query.filter("speaking"), "speaking") 

過濾器返回沒有,因爲這看起來對1個項目標記爲「華麗」和「說」。

如何過濾單獨的物品?

更新

Item表可能是這樣的:

  glam speaking 
     ------------------- 
item1 
item2 glam 
item3   speaking 
item4 
item5 glam 

我想過濾 「華麗」 和 「說」

回答

1

根據您目前的架構和當前的數據存儲API,您無法通過單個查詢實現此目的。

如果「華麗」,「散」和「說」是相互排斥的,您可以使用IN查詢上單場:

class Item(db.Model): 
    ... 
    tag = db.StringProperty() 

query.filter("tag IN", ["glam", "speaking"]) 

你也可以使用實驗Datastore Plus API並作出OR查詢(這是由內部合併兩個查詢的結果執行):

# Note: Your model must be a Datastore Plus model; this may require some restructuring! 
q1 = query.filter("glam =", "glam") 
q2 = query.filter("speaking =", "speaking") 
for result in q1.OR(q2): 
    .... 

注意,數據存儲以及API仍然在發展,所以我不知道如果這些查詢並行運行,但他們應該最終。此外,由於Datastore Plus API仍處於試驗階段並處於開發階段,因此您可能需要更改代碼以響應API流量。至少,您可以控制何時發生這些更新。

+0

感謝您的回答。此時我不想使用實驗性Datastore Plus API。那麼,在數據存儲中處理`圖像標記'的最好方法是什麼?我應該改變我的模式並使用'一對多'關係嗎? – Zeynel 2011-01-28 15:46:35

相關問題