如何在GAE ndb Python中访问所有重复的结构化属性

时间:2013-11-07 06:50:13

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

class X(ndb.Model): 
    content = ndb.StringProperty() 
    number = ndb.IntegerProperty() 

class P(ndb.Model): 
    unit = ndb.StructuredProperty(X, repeated=True) 

使用数据存储区查看器,我可以看到以下存储的数据:

Entity Kind             P 
Entity Key              ag1kZXZ-bGlmZXN3YWxschoLEg1BZHZlcnRpc2VtZW50IGCAgICA4NcKDA 
ID                      6015428115566296 
unit.content (list)     [u'Apple', u'Coca Cola', u'Orange', u'Audi']
unit.number (list)      [10L, 5L, 10L, 10L] 

目标:访问不同的unit.content值(例如,'Apple'等)

[我是GAE Python的新手;如果问题太愚蠢,请原谅]

我的(不成功)尝试[我尝试了其他一些方法但是徒劳]:

unitv_query = P.query() 
mv = unitv_query.fetch() 
    for a in mv.unit: 
        logging.info ("content=[%s]", a.content) 

我收到以下错误:

    :: 
    File "C:\learn\eg5.py", line 495, in render_unit

        for a in mv.unit:

    AttributeError: 'list' object has no attribute 'unit'

感谢任何帮助

1 个答案:

答案 0 :(得分:3)

unit属性将是X's的列表,但是您正在循环错误的事情 你应该是,

unitv_query = P.query() 
mv = unitv_query.fetch() 
    # mv is a list of P
    for a in mv: 

        # now loop over each entity in unit property.
        for i in a.unit:

            logging.info ("content=[%s]", i.content) 

在您的代码中,您尝试从mv访问单位,但mv是P个实体的列表 - 查询结果,因此您无法访问unit