我有一个与此类似的场景,我正在尝试找到最佳/最常见的解决方案:
class Car(db.Model):
peopleCapacity = db.IntegerProperty()
class Wheel(db.Model):
car = db.ReferenceProperty(reference_class=Car, collection_name='wheels')
diameter = db.IntegerProperty()
我想要这种查询的结果:
smallWheelsForBigCars = db.GqlQuery(
'SELECT * FROM Wheel WHERE diameter < 10 AND car.peopleCapacity > 6'
)
# returns 0 entities as properties like 'car.peopleCapacity' are apparently not supported
我考虑过的一些(hacky)解决方案:
- 分别对 Wheel 和 Car 进行约束并手动检查交叉口(慢!)
- 使用 computedProperty 将 car.peopleCapacity 的副本存储在 Wheel 中。(不好,因为当汽车的 peopleCapacity 发生变化时,我需要更新连接到汽车的所有车轮。是的,在我的实际情况下,“peopleCapacity”会改变)
我的两个问题是:
为什么 car.peopleCapacity 在查询中不起作用?
有没有更好的方法来解决这个问题?