【问题标题】:How do I order referenced objects from a Google App Engine Datastore query?如何从 Google App Engine 数据存储区查询中订购引用的对象?
【发布时间】:2009-03-27 19:40:03
【问题描述】:

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

当我开始迭代值时(最终在 Django 模板中),如何在每个 Gallery 对象上订购 Exhibit 集合?

即这不起作用


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

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

【问题讨论】:

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


    【解决方案1】:

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

    exhibits = Exhibit.all().filter("gallery=", gallery).order("position")

    或者等效地,在 GQL 中:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2015-04-19
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多