我想做的是在用户对内容进行投票的情况下为站点实现提交评分,就像在reddit中一样(参见http://code.reddit.com/browser/sql/functions.sql中的“热”函数)。编辑:最终希望能够检索任意筛选的任意长度的提交列表,根据它们的分数排列。
我的提交模型目前跟踪向上和向下的总票数。当前,当用户投票时,我创建并保存一个相关的投票对象,然后使用F()表达式更新提交对象的投票总数。问题是我想同时更新提交的分数,但是F()表达式仅限于简单的操作(缺少对log()、date_part()、符号()等的支持)。
根据我对Django有限的经验,我可以在这里看到5个选项:
函数;这是我的首选选项,似乎适合在
。
在我开始扩展F() (我甚至不确定这是可能的)之前,我准备重新发明轮子吗?有什么更标准的方法吗?这似乎是一个普通的用例,但在一个小时的搜索中,我还没有找到一个通用的解决方案.
编辑:还有一个选项:将数据库脚本中字段的默认值设置为包含my函数的表达式。这并不像#1那样灵活,但可能是解决问题的最快和最干净的方法(尽管我对扩展F()的初步研究看起来很有希望)。
发布于 2010-04-22 12:29:16
为什么你不能每隔一段时间就把分数去修饰,用投票对象来重建它呢?
如果不能做到这一点,就很容易创建一个“property”函数,作为一个对象属性进行评分。
@property
def score(self):
... calculate score from Vote objects ...
return score
我从来没有在这样的属性上使用过F(),但是它是Python,所以我打赌它能工作。
如果您使用django投票(我建议这样做),您可以将#3放在经理的record_vote函数中,因为所有的投票事务都是这样发生的。
https://stackoverflow.com/questions/2693859
复制