AppEngine数据存储区获取列表属性中包含所有项目的实体

时间:2011-01-08 00:20:28

标签: google-app-engine google-cloud-datastore listproperty

我想为我的应用实现某种标记功能。我想做点什么...

class Item(db.Model):
  name = db.StringProperty()
  tags = db.ListProperty(str)

假设我的搜索包含2个或更多标签。例如。 “餐厅”和“墨西哥”。

现在,我希望获得包含ALL的项目,在本例中为2,给定标记。

我该怎么做?或者有更好的方法来实现我想要的东西吗?

2 个答案:

答案 0 :(得分:0)

我相信您希望将标记存储为'db.ListProperty(db.Category)',然后使用以下内容查询它们:

   return db.Query(Item)\
             .filter('tags = ', expected_tag1)\
             .filter('tags = ', expected_tag2)\
             .order('name')\
             .fetch(256)

(不幸的是我找不到db.Category类型的任何好文档。所以我不能明确地说这是正确的方法。)另请注意,为了创建db.Category,您需要使用:

new_item.tags.append(db.Category(unicode(new_tag_text)))

答案 1 :(得分:0)

使用db.ListProperty(db.Key)代替,它存储实体键的列表。

模型:

 class Profile(db.Model):
 data_list=db.ListProperty(db.Key)

 class Data(db.Model):
 name=db.StringProperty()

的观点:

   prof=Profile()
   data=Data.gql("")#The Data entities you want to fetch

   for data in data:
       prof.data_list.append(data)

///这里data_list存储数据实体的密钥

Data.get(prof.data_list)将获取其密钥位于data_list属性中的所有数据实体