我可以让Appengine模型属性调用函数吗?

时间:2010-02-24 20:41:13

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

我正在实施一个基于特定排名算法的“热门”故事的首页。但是,我无法弄清楚如何传递Appengine的数据存储我自己的排序函数(就像我可以在python中使用sort(key = ranking_function))。我想要这样的东西:

class Story(db.Model):
    user = db.ReferenceProperty(User)
    text = db.TextProperty()
    def ranking(self):
        # my ranking function, returns an int or something
        return 1
    ranking = property(ranking_function)

以便稍后我可以致电:

Story.all().order("ranking").limit(50)

知道如何使用Appengine的数据存储模型吗?

2 个答案:

答案 0 :(得分:3)

我不认为这可以用你描述的方式使用App Engine,但我认为有可能实现你想要的。每次进行查询时,您希望数据存储区针对数据存储区中的每个元素运行排名功能。这不是很容易扩展,因为你可能有数百万个想要排名的实体。

相反,您应该只有一个名为rank的整数属性,并在每次更新实体时设置它。然后,您可以在订单子句中使用该属性。

答案 1 :(得分:1)

没有内置属性可以处理这个问题,但是有一个库aetycoon,它实现了DerivedProperty和其他相关属性,可以满足您的需求。 Here's一篇关于它如何运作的文章。