如果您使用的是數字ID由數據存儲區自動分配,當你put
一個實體,就可以然後用模型的方法get_by_id
存取實體:
class User(db.Model):
name = db.StringProperty()
# etc.
def AddUser(webapp2.RequestHandler):
def get(self):
newUser = User()
newUser.name = self.request.get('name')
# etc. assign all model properties
newUser.put()
# now, newUser.Key().id() contains the auto-assigned numeric id.
# we can pass this value to our template and get it back via
# a form paramter for subsequent operations.
def ShowUser(webapp2.RequestHandler):
def get(self):
user_to_show_id = self.request.get('id')
user_to_show = User.get_by_id(user_to_show_id)
if user_to_show is not None:
# populate the template parameters with the users's data
# and render the template
else:
# The requested user does not exist, so
# render an error message/page.
現在,如果你也想存儲屬於特定用戶的電話號碼實體,你讓他們保存,使得他們的父母是用戶實體。這將它們放在用戶的實體組中,並且實體組中的實體可以比與父母一起存儲時更快地被查詢。
比方說,任何用戶都可以有與之相關Phonenumber來實體中的任何給定數量:
class Phonenumber(db.Model):
number_type = db.StringProperty()
number = db.StringProperty()
我們將添加一個方法到User類:
def AddNumber(self, new_number_type, new_number):
new_number = Phonenumber(parent=self, number_type=new_number_type, number=new_number)
# In this case, self is the User entity, and by saying parent=self, we're putting
# this Phonenumber entity into User's entity group.
new_number.put()
def GetPhoneNumber(self):
# Now, getting all of User's phone numbers is a simple as a query with an
# Ancestor clause:
users_numbers = Phonenumber.all().ancestor(self).fetch(1000)
return users_numbers
顯然,這些類天真無邪,直截了當,但我希望他們能幫助你理解身份證和祖先的關係。通常情況下,您不必使用Key()
手動創建密鑰。除非你真的需要,否則不要走這條路。然而,如何理解鍵的作用是有利於真正理解AppEngine上,所以潛水和實驗,如果你喜歡它的感覺。
我覺得那些是你的兩個主要問題,是嗎?如果你有其他人,請繼續留言,我會編輯我的答案。
類似於你的問題:http://stackoverflow.com/questions/10156129/what-should-i-store-as-my-index-in-client-code – alex 2012-04-15 16:44:38