使用django和django-voting应用程序,如何根据每个项目的投票订购查询集?

Nic*_*s R 6 django sql-order-by django-voting

(我是python和django的新手,所以请耐心等一下.如果在其他地方已经找到并且找不到,我道歉

假设我有一个Link模型,通过django-voting应用程序,用户可以对链接实例进行投票.如何根据他们的分数订购这些链接实例,例如.首先显示分数较高的那些.

我假设我可以使用django-voting的get_top管理器,但这只会给我最高评分链接实例,并且不会考虑我想添加的其他参数(例如,那些属于特定用户的链接)或分页或其他).

我的猜测是为我的Link模型编写一个自定义管理器,我可以根据每个项目的分数过滤一个查询集.如果我理解正确,将要求我遍历每个项目,检查其分数,然后将其放置一个列表(或字典),然后根据每个项目的分数对其进行排序.这不会返回查询集,而是返回每个项目的字典.

我在这里错过了什么吗?

编辑:

这是Link模型的精简版:

class Link(models.Model):
    user = models.ForeignKey('auth.User')
    category = models.ForeignKey(Category)  
    date = models.DateTimeField( auto_now_add=True, null=True, blank=True )
    is_deleted = models.BooleanField(default=False, blank=True)
    links = ValidLinkManager()
    objects = models.Manager()
Run Code Online (Sandbox Code Playgroud)

当用户投票时我在我看来有这个:

Vote.objects.record_vote(link, user, vote)
Run Code Online (Sandbox Code Playgroud)

其中link是Link实例,user是auth.User的实例,vote是1,0或-1.ValidLinkManager只过滤掉那些is_deleted设置为True的链接.

Ofr*_*viv 1

VoteManager 中的方法get_top并不复杂。看看它的代码(在managers.py:122中)。您可以轻松创建它的一个版本,该版本接受过滤器作为另一个参数,并在创建后将其应用于“对象”查询集(第 158 行) - 这样您就可以添加其他过滤器,例如您缺少的过滤器。

也许你也可以将其作为补丁提供给乔纳森,他会将其放入 django-voting :)