Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向数据存储对象添加动态属性_Python_Google App Engine_Properties - Fatal编程技术网

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

Python 向数据存储对象添加动态属性,python,google-app-engine,properties,Python,Google App Engine,Properties,我对Python比较陌生,来自PHP世界。在PHP中,我通常会获取一行,该行对应于数据库中的对象,比如说User,并在将User对象传递到我的视图页面之前向其添加属性。 例如,用户具有属性email、name和id。 我从数据库中获得5个用户,在for循环中,我为用户分配一个动态属性,比如image 这在Python/googleappengine数据存储模型中似乎不起作用,我认为它必须在数据存储模型中比在for循环中使用Python做更多的工作。它在for循环中工作,这意味着我可以在for循环

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

这在Python/googleappengine数据存储模型中似乎不起作用,我认为它必须在数据存储模型中比在for循环中使用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
有人能向我解释为什么会发生这种情况,以及如何实现这一目标吗

我已经搜索了表单,但找不到任何内容。

尝试使用

有时你不想提前申报你的财产。A. 特殊的模型子类Expando更改其实体的行为 因此,只要指定的任何属性不是以 下划线保存到数据存储中


谢了,谢伊,这是一个可能的解决方案,也许最终会是最好的。但是,我对Expando类的理解更多的是将动态属性放入数据存储,而不是添加在视图页面上显示的属性,对吗?从数据存储的角度来看,我试图避免对不需要Expando的类使用Expando,以避免意外地将属性放在不应该有属性的实体上的风险。这肯定会起作用。你确定这是准确的密码吗?在第一个循环和第二个循环之间,您没有执行任何可能导致从数据存储中重新获取实例的操作?get_users可能是一个查询,在这种情况下,第二个循环将重新提取没有动态属性的用户。Daniel,您是对的!我的错误,伙计们,我正在打印整个对象,出于某种原因,也许你可以解释,只有原始属性打印出来。但是,如果我直接调用dynamic属性,比如上面的print ul.image,它就会工作。很抱歉