我有以下3个班级:
class Locality(db.Model):
location = db.ReferenceProperty()
class Organisation(db.Model):
locality = db.ReferenceProperty(Locality)
class Position(db.Model):
locality = db.ReferenceProperty(Locality)
Locality.location属性是对Organization或Position对象的引用。 我需要按地点过滤并获取所有参考组织的条目。
我已经尝试了,但它不起作用:
Locality.all().filter("location =",Organisation)
任何建议都将不胜感激。
答案 0 :(得分:1)
在这一行:
Locality.all().filter("location =", Organisation)
你应该传入一个组织实例而不是类本身,例如:
org = Organisation.get(some_org_key)
Locality.all().filter("location =", org)
答案 1 :(得分:0)
class Locality(db.Model):
location = db.ReferenceProperty()
class Organisation(db.Model):
locality = db.ReferenceProperty(Locality,collection_name='org')
class Position(db.Model):
locality = db.ReferenceProperty(Locality,collection_name='pos')
现在每个地方对象都有一个loc属性,它只是一个Organization的集合。
要了解有关建模的更多信息,请参阅此blog
答案 2 :(得分:0)
我更喜欢阿卜杜勒的做法而不是德鲁的回答(尽管他正确地回答了你的具体问题)。我不知道这里所有的活动部件,但我怀疑你想要对它进行一些不同的建模,可能使用PolyModel,以及一些去标准化。我的意思是只看这四个类的关系,我看到很多退化只是为了简单的查询。
答案 3 :(得分:0)
最后,我找到了基于PolyModels的解决方案:
class Locality(polymodel.PolyModel):
{ geo properties here }
class Organisation(Locality):
title = db.StringProperty()
class Position(Locality):
title = db.StringProperty()
要按地理属性过滤所有组织:
Organisation.all().filter({by geo properties of Locality model})
要按地理属性过滤所有地区(组织+职位):
Locality.all().filter({by geo properties of Locality model})
我想,我最初的解释非常清楚。对不起。谢谢大家,感谢您的建议。它们非常有用。