【问题标题】:Getting implicit property names on a db.Model in Google App Engine?在 Google App Engine 中的 db.Model 上获取隐式属性名称?
【发布时间】:2010-10-08 18:44:18
【问题描述】:

如何在 Google App Engine 中访问 db.Model 的隐式属性名称?特别是,假设我有以下内容:

class Foo(db.Model):
  specific = db.IntegerProperty()


class Bar(db.Model):
 foo = db.ReferenceProperty(Foo, collection_name = "bars") 

如果我尝试获取 Foo 上的属性名称,如下所示:

my_foo = Foo(specific = 42)
for key, prop in my_foo.properties().iteritems()
    print "HERE bars won't show up"

然后 my_foo.bars 属性不显示。还是我完全错了?

非常感谢任何帮助

将模型编辑为 Python,而不是 ruby​​

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    (该模型定义看起来像是 Python 和 Ruby 的奇怪混合体。)

    我不清楚你想在这里实现什么,但你可以使用自省获得模型属性成员的列表:

    [x for x in dir(Foo) if isinstance(getattr(Foo,x), db.Property)]
    

    如果您只是想将 Bar 的实例添加到 Foo,您应该创建新的 Bar 实例,使其 foo 字段指向 Foo 实例:

    foo = Foo(specific=42)
    foo.put()
    Bar(foo=foo).put()
    Bar(foo=foo).put()
    logging.info("Foo bars: %r" % list(foo.bars))
    

    【讨论】:

    • ReferenceProperties 不会在类上永久存储反向引用。因此,在 collection_name 中指定名称的属性未创建单元 Bar 已定义。
    • 您关于获取属性的建议似乎不起作用(尽管这是我想要做的)。猜猜我只使用键的 ListProperties ..
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2015-07-25
    • 2013-08-11
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    相关资源
    最近更新 更多