3

我有Exhibit引用Gallery对象的对象,这两个对象都存储在 Google App Engine Datastore 中。

当我开始迭代值时(最终在 Django 模板中),如何Exhibit对每个对象的集合进行排序?Gallery

即这不起作用


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

在模板中呈现时,画廊的顺序正确,但展品的顺序不正确。

4

1 回答 1

4

您需要构建自己的查询,而不是依赖 App Engine 创建的集合属性:

展览 = Exhibit.all().filter("gallery=", gallery).order("位置")

或者等效地,在 GQL 中:

展览 = db.GqlQuery("SELECT * FROM Exhibit WHERE gallery = :1 ORDER BY position", gallery)

如果您希望能够从模板内部执行此操作,而不是传入展览列表列表,您可以在执行此查询的 Gallery 对象上定义一个简单的方法,并从模板中引用它(例如, {{gallery.exhibits_by_position}} 将对 Gallery 对象执行exhibits_by_position(),然后可以执行上面的查询)。

如果您担心这对速度的影响,请不要担心:App Engine 创建的集合属性只是对此的语法糖。

于 2009-03-27T21:36:18.697 回答