首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django voting评论和投票

Django voting评论和投票
EN

Stack Overflow用户
提问于 2010-10-06 12:19:07
回答 1查看 1.4K关注 0票数 5

我在我的项目中使用了django-threadedcomments和django-voting来实现一个类似Reddit的评论投票系统。

我已经正确地设置了所有内容,并且我能够成功地记录每个线程评论及其子评论的投票,但是我有点纠结于如何对评论进行排序,以使得分最高的评论上升到顶部。

传递一个模板标记是一种解决方案吗?我尝试过这样做,并返回了一个列表,其中的项目是按score降序排序的,但是注释的父子关系被搞乱了。下面是我所做的:

代码语言:javascript
复制
class OrderByVotesNode(template.Node):
    def __init__(self, queryset_var, direction="desc"):
        self.queryset_var = template.Variable(queryset_var)
        self.direction = direction

    def render(self, context):
    key = self.queryset_var.var
    value = self.queryset_var.resolve(context)
    try:
        direction = template.Variable(self.direction).resolve(context)
    except template.VariableDoesNotExist:
        direction = "desc"
    model = value.model
    qn = connection.ops.quote_name
    ctype = ContentType.objects.get_for_model(model)
    by_score = model.objects.filter(id__in=[f.id for f in value]).extra(select={"score": """
            SELECT coalesce(SUM(vote), 0 )
            FROM %s
            WHERE content_type_id = %s
            AND object_id = %s.%s
        """ % (qn(Vote._meta.db_table), ctype.id, qn(model._meta.db_table), qn(model._meta.pk.attname))},
        order_by=[(direction == "desc" and "-" or "") + "score"])
    context[key] = by_score
    return u""

在这方面的任何帮助或建议都将非常感谢。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-08 23:51:01

有两种策略:

1)你只想在每个帖子上最顶层的评论上排序。在这个注释没有父注释的查询上添加一个限制(我不确定threadedcomments模型是如何设计的)。

2)获取排序后的结果,并遍历每个注释到其根父级。然后,从上到下过滤掉重复项。这样,每个帖子都会根据该帖子中任何评论的最高分数进行评分。这很难实现,坦率地说,在我看来,这并不是最直观的顺序。

这样做之后,您就有了一个有序的注释列表,它以线程的方式显示在模板中(我假设您正在进行一些模板递归)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3869471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档