1

我对 Python 比较陌生,来自 PHP 世界。在 PHP 中,我会例行地获取一行,该行对应于数据库中的对象,比如用户,并在将用户对象传递给我的视图页面之前为其添加属性。例如,用户具有属性 email、name 和 id。我从数据库中获取了 5 个用户,并在一个 for 循环中为用户分配了一个动态属性,比如图像。

这似乎不适用于 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

谁能向我解释为什么会发生这种情况以及如何实现这一目标?

我已经搜索了表格,但我找不到任何东西。

4

1 回答 1

0

尝试使用Expando 模型

有时您不想提前声明您的属性。一个特殊的模型子类 Expando 会更改其实体的行为,以便将分配的任何属性(只要它不以下划线开头)保存到数据存储区。

于 2013-02-09T21:22:14.213 回答