reddit风格的django投票
我需要手工实现一个模型中的投票系统 首先,我得到了迈克·德西莫内的大力帮助,但我需要扩展他的工作 这是我目前的代码 查看reddit风格的django投票,django,reddit,vote,Django,Reddit,Vote,我需要手工实现一个模型中的投票系统 首先,我得到了迈克·德西莫内的大力帮助,但我需要扩展他的工作 这是我目前的代码 查看 def show_game(request): game = Game.objects.get(pk=1) discussions = game.gamediscussion_set.filter(reply_to=None) d = { 'game':game, 'discussions':discussions
def show_game(request):
game = Game.objects.get(pk=1)
discussions = game.gamediscussion_set.filter(reply_to=None)
d = {
'game':game,
'discussions':discussions
}
return render_to_response('show_game', d)
模板
<ul>
{% for discussion in discussions %}
{{ discussion.html }}
{% endfor %}
</ul>
<li>
{{ discussion.message }}
{% if replies %}
<ul>
{% for reply in replies %}
{{ reply }}
{% endfor %}
</ul>
{% endif %}
</li>
讨论模板
<ul>
{% for discussion in discussions %}
{{ discussion.html }}
{% endfor %}
</ul>
<li>
{{ discussion.message }}
{% if replies %}
<ul>
{% for reply in replies %}
{{ reply }}
{% endfor %}
</ul>
{% endif %}
</li>
我可以在模板中使用此选项来获得当前投票,但是我不能在我的view.py文件中使用此选项来按此值排序,是否仍要在我的视图中包含此值
编辑(2)
我正在慢慢地到达那里,我需要注释两个字段并对它们进行计算,但是似乎我无法使用注释进行基本的数学计算
有什么想法吗
discussions = game.gamediscussion_set.filter(reply_to=None).annotate( score= (Count('userUpVotes') - Count('userDownVotes')) ).order_by('-score')
reddit算法基于计算重力的公式。我是从我的房间里找到的 Reddit算法
let t = (t1 – epoch)
(其中t1是发布帖子的时间)
那么
- 1如果赞成票多于反对票
- -1如果下降票多于上升票
- 如果有相同的数字,则为0
z = max({x,1})
我们有
ranking = C log10(z) + yt1
Where C is a constant (C = 45000).
我知道这不是对你问题的直接回答。但是窥探一下可能会很有帮助。当我必须实现一个类似ReDDIT的半智能图像裁剪算法时,它帮助了我。 然后,您所要做的就是重写
save()
,使用vote\u difference()
方法计算分数
这使得排序更加容易,并且可能会减少您正在进行的数据库调用的数量。我发布了一个名为qhonuskan votes的投票应用程序,您可以从这里查看它:Hay,感谢您的回复,肯定为reddits的工作方式添加了一些insite。然而,你似乎没有抓住要点。我的模型有两个字段(UserUpVoces和UserDownVoces),我将计算这些值之间的差异,以确定如何安排我的讨论。userUpVotes可以有8个用户,其中userDownVotes可以有2个。所以最后的投票结果是UserUpVoces-UserDownVoces,在这种情况下可能是+6。现在我需要帮助如何将userDownVotes和userUpVotes字段相加,并将它们相互分离,然后根据这些字段进行排序。很抱歉没有将算法与Django关联,我觉得这些信息会有所帮助,尽管我意识到它没有回答问题。缺点是它使用的是pylons框架,而不是Django框架:(那么,你在这方面取得了多大进展?
z = max({x,1})
ranking = C log10(z) + yt1
Where C is a constant (C = 45000).