如何将临时信息附加到我的appengine ndb模型实例?

时间:2014-06-26 07:57:18

标签: python google-app-engine app-engine-ndb

我正在尝试为我的模型设置属性

class Foo(ndb.Model):
  name = ndb.StringProperty()
  1. 从memcache
  2. 中检索Foo对象
  3. 如果不在memcache中,则从数据库查询。 在此,我想将其他信息附加到Foo实例 foo.special_name = "don't persist this"
  4. 将此对象从memcache传递到我的自定义JsonEncoder
  5. 将此对象转储到字典中,foo = {name:" hello",special_name:"不要坚持这个"}
  6. AFAIK,我无法设置非字段的ndb.Model类的属性。

    我害怕使用ndb.Expando,因为我担心这个对象会被持久化,special_name会被保存到我的数据库中。

    foo添加临时可支配价值的最简洁方法是什么?

    编辑:

    >>> class Foo(ndb.Model):
      name = ndb.StringProperty()
    >>> f = Foo()
    >>> f.put()
    Key('Foo', 26740114379063)
    >>> f.bar = 123 
    >>> f
    Foo(name=None)
    >>> f.bar
    Traceback (most recent call last):
      File "/base/data/home/apps/shell/1.335852500710379686/shell.py", line 267, in get
        exec compiled in statement_module.__dict__
      File "<string>", line 1, in <module>
    AttributeError: 'Foo' object has no attribute 'bar'
    >>> setattr(f, 'bar', 123)
    >>> f
    Foo(name=None)
    >>> f.bar
    Traceback (most recent call last):
      File "/base/data/home/apps/shell/1.335852500710379686/shell.py", line 267, in get
        exec compiled in statement_module.__dict__
      File "<string>", line 1, in <module>
    AttributeError: 'Foo' object has no attribute 'bar'
    >>> setattr(f, 'bar', 123)
    >>> getattr(f, 'bar')
    Traceback (most recent call last):
      File "/base/data/home/apps/shell/1.335852500710379686/shell.py", line 267, in get
        exec compiled in statement_module.__dict__
      File "<string>", line 1, in <module>
    AttributeError: 'Foo' object has no attribute 'bar'
    

1 个答案:

答案 0 :(得分:2)

  

“我无法设置非字段的ndb.Model类的属性。”

你为什么这么想?模型实例只是对象,就像Python [*]中的任何其他对象一样,您可以根据需要在它们上设置任意属性。

[*] :(只要该类没有定义__slots__,ndb.Model没有定义)