【发布时间】:2013-01-25 08:21:13
【问题描述】:
我对 Python 比较陌生,来自 PHP 世界。在 PHP 中,我会例行地获取一行,该行对应于数据库中的对象,比如用户,并在将用户对象传递给我的视图页面之前为其添加属性。 例如,用户具有属性 email、name 和 id。 我从数据库中获取了 5 个用户,并在 for 循环中为用户分配了一个动态属性,比如 image。
这似乎不适用于 for 循环中的 Python/Google App Engine 数据存储模型(我认为它对数据存储模型的作用比 python 更多)。它在 for 循环中工作(这意味着我可以在 for 循环中引用 user.image,但是一旦 for 循环结束,所有对象似乎都不再具有新的属性 image。
这是一个代码示例:
# 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
谁能向我解释为什么会发生这种情况以及如何实现这个目标?
我已经搜索了表格,但找不到任何东西。
【问题讨论】:
-
这绝对可以。你确定这是准确的代码吗?您在第一个和第二个循环之间没有做任何可能导致从数据存储区重新获取实例的操作?
-
get_users() 可能是一个查询,在这种情况下,第二个循环将重新获取没有动态属性的用户。
-
丹尼尔,你是对的!我的错误伙计们,我正在打印整个对象,出于某种原因(也许你可以解释一下),只打印出原始属性。但是,如果我像上面那样直接调用动态属性(打印 ul.image),它就可以工作。对不起!
标签: python google-app-engine properties