Как заказать объекты, на которые есть ссылки, из запроса хранилища данных Google App Engine? - PullRequest
3 голосов
/ 27 марта 2009

У меня есть Exhibit объекты, которые ссылаются на Gallery объекты, оба из которых хранятся в хранилище данных Google App Engine.

Как мне упорядочить коллекцию Exhibit для каждого объекта Gallery, когда я перехожу к итерации по значениям (в конечном итоге в шаблоне Django)?

т.е. это не работает


class Gallery(db.Model):
  title = db.StringProperty()
  position = db.IntegerProperty()

class Exhibit(db.Model):
  gallery = db.ReferenceProperty(Gallery, collection_name='exhibits')
  title = db.StringProperty()
  position = db.IntegerProperty()

galleries = db.GqlQuery('SELECT * FROM Gallery ORDER BY position')
for gallery in galleries:
  gallery.exhibits.order('position')

# ... send galleries off the the Django template

При отображении в шаблоне галереи упорядочены правильно, а экспонаты - нет.

1 Ответ

4 голосов
/ 28 марта 2009

Вместо того чтобы полагаться на свойство коллекции, создаваемое App Engine, вам нужно создать собственный запрос:

экспонаты = Exhibit.all (). Фильтр ("gallery =", gallery) .order ("position")

Или, что эквивалентно, в GQL:

артефакты = db.GqlQuery («ВЫБРАТЬ * ИЗ ВЫСТАВКИ ГДЕ галерея =: 1 ПОРЯДОК ПО Позиции», галерея)

Если вы хотите сделать это из шаблона, вместо того, чтобы передавать список списков экспонатов, вы можете определить простой метод для объекта Gallery, который выполняет этот запрос, и ссылаться на него из шаблон (например, {{gallery.exhibits_by_position}} выполнит exitits_by_position () для объекта Gallery, который затем может выполнить вышеуказанный запрос).

Если вас беспокоят последствия для скорости, не беспокойтесь: свойство коллекции, создаваемое App Engine, является просто синтаксическим сахаром для этого.

...