如何根据存储在单独模型中的字段进行排序



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

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>')

查询只能访问您正在查询的实体,如果您想使用来自另一个实体的属性(或基于其他实体字段的聚合计算)来排序结果,则需要将其存储在您正在查询的实体中。

在评级的情况下,这可能意味着汇总评级并将其分配给文章的周期性任务。

要做到这一点,您需要运行一个查询,获取引用您的News实体的每个NewsRating,并将所有评级相加(因为数据存储不提供join)。这在时间和成本上都将是一项巨大的任务。我建议您看看刚刚听到的例子,作为参考点。

最新更新