使用django和django投票应用程序,我如何根据每个项目的投票情况订购queryset?

使用django和django投票应用程序,我如何根据每个项目的投票情况订购queryset?,django,sql-order-by,django-voting,Django,Sql Order By,Django Voting,(我是python和django的新手,请耐心等待。如果在其他地方有人回答了这个问题,但我找不到,我表示歉意) 假设我有一个链接模型,通过django投票应用程序,用户可以对链接实例进行投票。如何根据分数对链接实例进行排序,例如,首先显示分数较高的链接实例 我假设我可以使用get_top manager of django voting,但这只会给我提供得分最高的链接实例,而不会考虑我想添加的其他参数(例如,属于特定用户或分页或其他内容的链接) 我的猜测是为我的链接模型编写一个自定义管理器,在这

(我是python和django的新手,请耐心等待。如果在其他地方有人回答了这个问题,但我找不到,我表示歉意)

假设我有一个链接模型,通过django投票应用程序,用户可以对链接实例进行投票。如何根据分数对链接实例进行排序,例如,首先显示分数较高的链接实例

我假设我可以使用get_top manager of django voting,但这只会给我提供得分最高的链接实例,而不会考虑我想添加的其他参数(例如,属于特定用户或分页或其他内容的链接)

我的猜测是为我的链接模型编写一个自定义管理器,在这里我可以根据每个项目的分数过滤查询集。如果我理解正确,我需要循环检查每个项目,检查其分数,然后将其放入列表(或词典),然后根据每个项目的分数进行排序。这不会返回queryset,而是返回包含每个项的字典

我是不是遗漏了什么

编辑:

以下是链接模型的精简版本:

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()
当用户投票时,我认为:

Vote.objects.record_vote(link, user, vote)
其中link是link实例,user是auth.user的实例,vote为1、0或-1。
ValidLinkManager只是过滤掉那些设置为True的已删除链接。

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


也许你也可以把它作为补丁提供给jonathan,他会把它放在django投票中:)

我选择在我的模型中使用泛型关系:

votes = generic.GenericRelation(Vote)
然后对其进行汇总:

my_model.objects.annotate(num_votes=Count('votes'))
在本例中,我只是计算对象收到的投票数,但您可以使用
Avg
切换
Count
,以获得平均值


因为,我安装了。

你能发布一些代码吗,可能是你的链接模型是什么样子的…?我不太确定你在这里想做什么。你只是想排序显示投票吗?不,我想根据每个项目的分数/投票排序链接查询集。目标是首先显示得分最高的项目。