我對Python相對較新,來自PHP世界。在PHP中,我會經常取一行,它將對應於數據庫中的對象,稱爲User,並在將用戶對象傳遞給我的查看頁面之前向其添加屬性。 例如,用戶具有屬性電子郵件,名稱和ID。 我從數據庫中獲得5個用戶,並且在for循環中,我爲用戶分配了一個動態屬性,例如圖像。將動態屬性添加到數據存儲對象
這似乎並不在Python /谷歌App Engine數據存儲模型的工作(我認爲它具有比Python的數據存儲模型做多),在for循環中。它可以在for循環中工作(這意味着我可以在for循環中引用user.image,但是一旦for循環結束,所有對象似乎都不再具有新的屬性圖像了。
這是一個代碼示例:
# Model
Class User(ndb.Model):
email = ndb.StringProperty()
name = ndb.StringProperty()
# And then a function that returns a list of users
users = User.get_users()
user_list = []
# For loop
for user in user:
# For example, get image
user.image = Image.get_image(user.key)
user_list.append(user)
# If I print or log this user in the for loop, I see a result
logging.info(user.image) # WORKS!
for ul in user_list:
print ul.image # Results in None/ATTR Error
我搜索的形式,但我無法找到任何東西給我任何人都可以解釋爲什麼這種情況正在發生,以及如何實現這一目標?
。
這應該肯定有效。你確定這是確切的代碼嗎?您在第一個和第二個循環之間沒有做任何事情,這可能會導致實例從數據存儲中重新獲取? – 2013-02-10 01:31:53
get_users()可能是一個查詢,在這種情況下,第二個循環將重新獲取沒有動態屬性的用戶。 – 2013-02-10 06:27:39
丹尼爾,你是對的!我的錯誤傢伙,我打印整個對象,出於某種原因(也許你可以解釋),只有原始屬性打印出來。但是,如果我直接調用動態屬性,就像上面那樣(print ul.image),它就可以工作。抱歉! – kevin 2013-02-11 01:03:02