J'utilise django-threadedcomments et django-voting dans mon projet pour obtenir un système de vote de type Reddit.Django threadedcomments et vote
J'ai tout configuré correctement et je suis capable d'enregistrer avec succès les votes pour chaque commentaire fileté et ses enfants, mais je suis un peu coincé quant à la façon de trier les commentaires de sorte que le commentaire avec le meilleur score monte au sommet.
Est-ce que le passage d'une balise de gabarit serait une solution? J'ai essayé ceci et ai retourné une liste où les articles ont été commandés par score
descendant, cependant la relation parent-enfant des commentaires a été foiré. Voici ce que j'ai fait:
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""
Toute aide ou suggestion à ce sujet serait grandement appréciée. Merci!
Merci pour la réponse OmerGertel! J'ai finalement réussi à balayer et essayer à nouveau ce problème - je suis allé avec votre première solution suggérée car elle semble avoir le plus de sens pour moi. Une fois que j'ai ajouté un filtre à trier par commentaires avec 'parent = None', j'ai ensuite passé un autre ensemble de requêtes de ses enfants et les ai triés par score. Cela a fonctionné parfaitement, merci pour votre aide! – twampss
@twampss cela vous dérangerait-il de poster votre code mis à jour? – anders