如果我直接引用谷歌应用引擎属性对象,我如何获取()或设置()?

时间:2009-04-09 22:47:09

标签: google-app-engine

假设我有一个名为Bird的Model类和一个名为pigeon的Bird实例。我知道我可以使用

获得鸽子(或鸟)的所有属性
properties = pigeon.properties() #Note, Bird.properties() would also work

这会返回一个字典,其中的键是与我在鸟类中提供的属性名称相匹配的字符串,值是实际的Property对象。我的问题是,如何使用所述属性对象获取或设置值。我希望这样做,因为我想允许客户端动态指定为字符串:

1)Model对象的关键

2)所述Model对象的属性

3)以及所述Model对象的前述属性可能采用的值

很明显,我需要首先获取Model对象,然后确定是否存在所述Property,最后以某种方式获取或设置它?这可能吗?谢谢。

1 个答案:

答案 0 :(得分:2)

我玩App Engine Console,非常适合测试和试验。在我看来,你想要使用__set__,第一个参数是你的模型实例,第二个参数是新值。接下来,您需要像往常一样put()实例。

这是一个更清晰的控制台会话。 (我是否已经提到了App Engine控制台的功能如何?)

>>> from google.appengine.ext import db
>>> class Bird(db.Model):
...   name = db.StringProperty()
...   can_fly = db.BooleanProperty()
... 
>>> def summarize():
...   for name in ('Pesto', 'Bobby'):
...     count = Bird.all().filter('name =', name).count()
...     print 'I found %d birds named %s' % (count, name)
...
>>> summarize()
I found 0 birds named Pesto
I found 0 birds named Bobby
>>> pigeon = Bird(name='Pesto', can_fly=True)
>>> pigeon.put()
datastore_types.Key.from_path('Bird', 41015L, _app=u'con')
>>> summarize()
I found 1 birds named Pesto
I found 0 birds named Bobby
>>> props = pigeon.properties()
>>> props
{'can_fly': <google.appengine.ext.db.BooleanProperty object at 0x46ddd1cc3ddb2268>, 'name': <google.appengine.ext.db.StringProperty object at 0x46ddd1cc3ddb2fe8>}
>>> prop = props['name']
>>> prop
<google.appengine.ext.db.StringProperty object at 0x46ddd1cc3ddb2a68>
>>> prop.__set__(pigeon, 'Bobby')
>>> pigeon.name
'Bobby'
>>> pigeon.put()
datastore_types.Key.from_path('Bird', 41015L, _app=u'con')
>>> summarize()
I found 0 birds named Pesto
I found 1 birds named Bobby
>>> bobby = Bird.all().filter('name =', 'Bobby').fetch(1)[0]
>>> bobby.name
u'Bobby'

如果您自己尝试在线控制台演示,请务必先删除旧的实例,因为我们都共享同一个数据存储。