2012-03-14 42 views
0

我想使用基於關鍵參數的filter()方法。例如:如何根據密鑰將過濾器應用於Google數據存儲集合?

user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw" 
d=datamodel.Task.all() 
d.filter("user=",user_id) 
results=d.fetch(1024) 

這會產生零結果,並且可能是因爲密鑰格式不正確。如果這其中GQL我將不得不使用這樣的密鑰()函數:

db.gqlQuery("select * from Task where user=Key(:1)",user_id) 

不過,我不認爲我可以在過濾器中使用的密鑰()函數,但必須有一些Python功能等價物...有沒有一種方法可以正確地格式化在filter()方法中使用的密鑰?

回答

4

你確實可以在過濾器中使用Key實例!

from google.appengine.api.datastore_types import Key 

user_id="agxkZXZ-emFiZXRhLTJyCgsSBFVzZXIYGAw" 
datamodel.Task.all().filter('user', Key(user_id)) 
+0

嗯,謝謝,但沒有骰子。該函數返回相同的base64字符串。 – rook 2012-03-14 22:15:31

+0

'Key(user_id)'基於'user_id'中的字符串編碼鍵值返回一個'Key'對象。如果你用這個對象的'str'表示,它會將它轉換回編碼的字符串。但它應該可以在過濾器中使用。這假設你有一些類型爲'Task'的實體,它的'user'屬性是一個與給定鍵相同的'Key'值。你能否確認屬性值是以這種方式存儲的? – 2012-03-14 23:29:07

+1

你確定你使用了正確的''Key''嗎? 「Key(user_id)」的返回值應該是類Key的一個實例,而不是字符串。 我的答案假設一個模型,其中''user = db.ReferenceProperty(User)''(它需要''Key''作爲它的值) – tdavis 2012-03-15 16:59:12

相關問題