Google App Engine Python,来自相关实体的查询

时间:2017-08-04 14:57:25

标签: google-app-engine-python

我有两个具有一对多关系的实体。 Sahip个实体可能有多个Calisma

class Sahip(ndb.Model):
    customid=ndb.StringProperty(indexed=True)
    adi=ndb.StringProperty(indexed=True)
    soyadi=ndb.StringProperty(indexed=True)
    ozgecmis=ndb.TextProperty()
    tipi=ndb.StringProperty(indexed=True

为此,我使用了KeyProperty

class Calisma(ndb.Model):
    sahibi_fk=ndb.KeyProperty(kind=Sahip,indexed=True)
    sahibi=ndb.StringProperty(indexed=True) #fk
    adi=ndb.StringProperty(indexed=False)
    yapimyili=ndb.IntegerProperty(indexed=True)
    yapimteknigi=ndb.StringProperty(indexed=True)
    en=ndb.IntegerProperty(indexed=True)
    boy=ndb.IntegerProperty(indexed=True)
    derinlik=ndb.IntegerProperty(indexed=True)
    detay=ndb.TextProperty()

我以这种方式插入新实体:

entity=Calisma()  
entity.adi=adi  
entity.yapimyili=int(yapimyili) 
entity.yapimteknigi=yapimteknigi
entity.en=int(en)  entity.boy=int(boy) 
entity.derinlik=int(derinlik)  
entity.detay=detay entity.tip=tip  
entity.sahibi=sahibi 
entity.sahibi_fk=ndb.Key(Sahip,sahibi) 
entity.put()

但是,此查询不起作用:

class agah(webapp2.RequestHandler):
    def get(self):

        sahip=Sahip.query(Sahip.customid=="suat-atan-1966").get()
        calisma=Calisma.query(Calisma.sahibi_fk==sahip.key)
        m="***"
        for i in calisma:
            m=m+i.adi+"<br>"
        self.response.write(m)

1 个答案:

答案 0 :(得分:1)

query().get()调用会返回结果列表(可能为空),而不是单个结果。

在你的情况下:

sahip=Sahip.query(Sahip.customid=="suat-atan-1966").get()

表示sahip是一个列表,因此sahip.key应生成:

  

AttributeError:&#39; list&#39;对象没有属性&#39;键&#39;

修复可能是这样的:

results = Sahip.query(Sahip.customid=="suat-atan-1966").get()
if results:
    sahip = results[0]
    calisma=Calisma.query(Calisma.sahibi_fk==sahip.key)