gpt4 book ai didi

Django线程注释和投票

转载 作者:行者123 更新时间:2023-12-04 20:23:21 25 4
gpt4 key购买 nike

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

我已经正确设置了所有内容,并且能够成功记录每个主题的评论及其子级的投票,但是我对如何对评论进行排序有些困惑,以使得分最高的评论升至顶部。

解决方案是通过模板标记吗?我尝试过此操作,并返回了一个列表,其中的项目按score降序排列,但是注释的父子关系变得困惑。这是我所做的:

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""

任何帮助或建议对此将不胜感激。谢谢!

最佳答案

有两种策略:

1)您只想对每个线程的最顶部注释进行排序。在查询中添加一个限制,即该注释没有父注释(我不确定如何精确设计threadedcomments模型)。

2)您获得排序结果,并将每个注释遍历到其根父对象。然后,从顶部到底部过滤掉重复项。这样,将根据该线程中任何评论的最高得分对每个线程评分。这很难实现,并且坦率地说,在我看来,这似乎不是最直观的命令。

完成此操作后,您将在模板中以线程方式显示注释的有序列表(我假设您正在进行一些模板递归)。

关于Django线程注释和投票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com