0

I'm implementing a frontpage with "hot" stories based on a certain ranking algorithm. However, I can't figure out how to pass App Engine Datastore my own sort function (like I can in Python with sort(key=ranking_function)). I want something like this:

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)

So that I can later call:

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

Any idea how to do this using App Engine Datastore models?

4

2 回答 2

3

我认为 App Engine 不可能按照您描述的方式实现,但我认为有可能实现您想要的。您希望数据存储在每次执行查询时针对数据存储中的每个元素运行您的排名函数。这不是非常可扩展的,因为您可能拥有数百万个要排名的实体。

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

于 2010-02-24T20:58:42.777 回答
2

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

于 2010-02-25T10:05:38.510 回答