AppEngine Datastore получает объекты, которые имеют ВСЕ элементы в списке свойств - PullRequest
0 голосов
/ 08 января 2011

Я хочу реализовать в своем приложении какую-то функцию тегирования.Я хочу сделать что-то вроде ...

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

Предположим, у меня есть поиск, который имеет 2 или более тегов.Например."restaurant" и "mexican".

Теперь я хочу получить Предметы, которые имеют ВСЕ, в данном случае 2, заданные теги.

Как это сделать?Или есть лучший способ реализовать то, что я хочу?

Ответы [ 2 ]

0 голосов
/ 20 января 2011

вместо этого используйте 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

Data.get (prof.data_list) получит все объекты данных, ключ которых находится в атрибуте data_list

0 голосов
/ 08 января 2011

Я полагаю, что вы хотите, чтобы теги были сохранены как '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)))
...