如何订购从谷歌App Engine数据存储查询引用的对象?
-
22-08-2019 - |
题
我Exhibit
哪个参考对象Gallery
两者都存储在谷歌应用程序引擎的数据存储。对象
如何订购时,我避开遍历值(最终在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
当在模板呈现时,画廊正确排序,但表现出不
解决方案
而不是依赖于集合属性的应用程序引擎创建的,你需要构建自己的查询:
展品= Exhibit.all()。过滤器( “画廊=”,画廊).order( “位置”)
或者等价地,在GQL:
展品= db.GqlQuery( “SELECT * FROM图表WHERE画廊=:1个ORDER BY位置”,画廊)
如果您希望能够从模板中做到这一点,而不是传递在展品清单-的清单,你可以定义执行此查询库对象一个简单的方法,并从引用它模板(例如,{{gallery.exhibits_by_position}}将库对象,然后可以执行上述查询上执行exhibits_by_position())。
如果你担心这个速度的影响,不用担心:集合属性的App Engine的创建是这只是语法糖
不隶属于 StackOverflow