向数据存储区对象添加动态属性

时间:2013-02-09 21:17:37

标签: python google-app-engine properties

我是Python的新手,来自PHP世界。在PHP中,我会定期获取一行,它对应于数据库的对象和对象,比如User,并在将用户对象传递给我的视图页面之前向其添加属性。 例如,用户具有属性电子邮件,名称和ID。 我从数据库中获得了5个用户,并且在for循环中,我为用户分配了一个动态属性,比如图像。

在for循环中,这似乎不适用于Python / Google App Engine数据存储模型(我认为它必须使用数据存储模型比python做更多)。它在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

任何人都可以向我解释为什么会发生这种情况以及如何实现这一目标吗?

我搜索了表格,但找不到任何内容。

1 个答案:

答案 0 :(得分:0)

尝试使用Expando Model

  

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