5
我在我的項目中使用django-threadedcomments和django-voting來實現類似Reddit的評論投票系統。Django threadedcomments and voting
我已經正確設置了一切,並且能夠成功記錄每個線程評論及其子項的投票,但是我對於如何對評論進行排序以至於評分最高上升到頂部。
會傳遞模板標籤是一個解決方案嗎?我試過這個,並返回了一個列表,其中的項目按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""
任何幫助或建議,將不勝感激。謝謝!
感謝您的回答OmerGertel!我終於可以掃一掃,再次嘗試這個問題 - 我採用了你的第一個建議的解決方案,因爲它似乎對我最有意義。一旦我添加了一個過濾器,按照「parent = None」的註釋進行排序,然後我傳遞了另一個子組的查詢集並按分數排序。這工作完美,感謝您的幫助! – twampss 2010-11-13 20:48:07
@twampss你會介意發佈你的更新代碼嗎? – anders 2011-06-09 10:51:51