Как упорядочить объекты, на которые ссылаются, из запроса к хранилищу данных Google App Engine?

StackOverflow https://stackoverflow.com/questions/691217

Вопрос

У меня есть 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

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

Это было полезно?

Решение

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

экспонаты = Exhibit.all().filter("галерея =", галерея).order("позиция")

Или, что то же самое, в GQL:

экспонаты = db.GqlQuery("SELECT * FROM Exhibit WHERE галерея = :1 ORDER BY Position", галерея)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top