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

标签 django sql-order-by django-voting

(我是 python 和 django 的新手,所以请耐心等待我一秒钟。如果在其他地方已经回答了这个问题并且找不到它,我深表歉意)

假设我有一个链接模型,用户可以通过 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()

当用户投票时,我认为:
Vote.objects.record_vote(link, user, vote)

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

最佳答案

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

也许你也可以把它作为补丁提供给乔纳森,他会把它放在 django-voting 中:)

关于django - 使用 django 和 django-voting 应用程序,如何根据每个项目的投票对查询集进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2848777/

相关文章:

python - Django 查找图中两个顶点之间的路径

python - 从 Django sqlite3 数据库中删除对象,减少数据库大小

python - 如何在 Django REST Framework 中对图片上传进行单元测试

python - 如何使用 Django 获取两条随机记录

java - JPA Criteria Query API 和两列排序

mysql - 使用条件按两列排序?

mysql - 我应该如何解决 mysql-slow.log 中的慢投票查询?

python - 有没有使用 django 的 i18n 帮助模块?

django - 如何将属性 '_meta' 添加到对象?

django - 如何限制用户对自己的模型进行投票