如何通过存储在单独模型中的字段进行排序?

时间:2011-10-16 14:10:21

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

以下是我的数据存储区结构的简化版本:

class News(db.Model):
    title = db.StringProperty()

class NewsRating(db.Model):
    user = db.IntegerProperty()
    rating = db.IntegerProperty()
    news = db.ReferenceProperty(News)

现在我需要显示按总评分排序的所有新闻(不同用户评分的总和)。我如何在以下代码中执行此操作:

news = News.all()
# filter by additional parms
# news.filter("city =", "1")
news.order("-added") # ?
for one_news in news:
    self.response.out.write(one_news.title()+'<br>')

2 个答案:

答案 0 :(得分:1)

查询只能访问您要查询的实体,如果您有来自其他实体的属性(或基于其他实体的字段的某些聚合计算),您希望用它来订购结果,那么您将会需要将它存储在您要查询的实体中。

在评级的情况下,这可能意味着定期任务总结评级并将其分发给文章。

答案 1 :(得分:1)

为此,您需要运行查询,获取引用NewsRating实体的每个News并汇总所有评级(因为数据存储区不提供JOIN)。无论是时间还是成本,这都是一项艰巨的任务。我建议您查看just-overheard-it示例作为参考点。