我有以下问题:
我想检索所有类别的产品
class Category(emodel):
name = db.StringProperty()
class Channel(emodel):
name = db.StringProperty()
category = db.ReferenceProperty(Category,collection_name="cat_set")
class Product(emodel):
name = db.StringProperty()
channel = db.ReferenceProperty(Channel,collection_name="ch_set")
现在我想写一个gql查询,它可以检索一个类别的所有内容。 例如:
Product.gql("WHERE channel.category == KEY (:1)", category_selected_key)
请记住,每个频道都可以经常更改其类别,因此我希望能快速避免cpu的额外工作
感谢
答案 0 :(得分:2)
App Engine数据存储区不支持连接(这是您隐式尝试执行的操作)。解决此问题的最简单方法是将ProductProperty从Product添加到Category,其值与Product的Channel类别相同,从而对其进行非规范化处理,以便您可以简单地进行查询。
答案 1 :(得分:1)
使用GQL,你无法进行'嵌套'查询,你可以在SQL中过滤引用实体的属性(使用连接)。
由于您的Product实体中的引用仅存储引用的Channel实体的键,因此您必须先执行另一个查询以检索您尝试检索的类别的键:
selected_channel = Channel.gql("WHERE category = :1", category_selected_key).get()
category_products = Product.gql("WHERE channel = :1", selected_channel).fetch()