这是this问题的下一步,我需要运行查询并应用过滤器。 这是我的模型
from google.appengine.ext import db
Class Car(db.Model):
name=db.StringProperty()
model=db.StringProperty()
mileage=db.IntegerProperty()
person = db.ReferenceProperty(Person, collection_name='person')
Class Person(db.Model):
name=db.StringProperty()
age=db.IntegerProperty()
问题:对于一个人,我想获得他拥有的所有车辆
方法:获取所有车辆并对名称为“随机”的人应用过滤器 我尝试了以下但是它不起作用
s = Car.all()
s.filter('person.name =', 'Random') # It fails here
result = s.fetch(1)[0] # just first result for now
print result.text
print result.votes
print result.page.language
如何运行此查询? 谢谢
答案 0 :(得分:2)
您只能对索引属性使用过滤器。 person.name
来自其他实体!在sql中,您需要使用join(这在数据变大时是不可能的),在google bigtable中,就像许多其他非关系数据库表join
一样。幸运的是,你的情况非常简单,如果你知道关键人物,你可以选择所有的汽车:
>>> person = Person.all().filter('name =', 'Mr. Random').fetch(1)[0]
>>> cars = Car.all().filter('person =', person.key())
如果您为collection_name
Class Car(db.Model):
...
person = db.ReferenceProperty(Person, collection_name='cars_collection')
您可以访问所有这样的汽车:
>>> person = Person.all().filter('name =', 'Mr. Random').fetch(1)[0]
>>> mrs_randoms_cars = person.cars_collection