Hay ich muss Hand implementieren ein Abstimmungssystem in ein Modell.Reddit Stil Abstimmung mit Django
Ich hatte eine riesige helfende Hand von Mike DeSimone, die diese Arbeit in erster Linie machen, aber ich muss seine Arbeit erweitern.
Hier ist meine aktuellen Code
Ansicht
def show_game(request):
game = Game.objects.get(pk=1)
discussions = game.gamediscussion_set.filter(reply_to=None)
d = {
'game':game,
'discussions':discussions
}
return render_to_response('show_game', d)
Vorlage
Modell
class GameDiscussion(models.Model):
game = models.ForeignKey(Game)
message = models.TextField()
reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True)
created_on = models.DateTimeField(blank=True, auto_now_add=True)
userUpVotes = models.ManyToManyField(User, blank=True, related_name='threadUpVotes')
userDownVotes = models.ManyToManyField(User, blank=True, related_name='threadDownVotes')
def html(self):
DiscussionTemplate = loader.get_template("inclusions/discussionTemplate")
return DiscussionTemplate.render(Context({
'discussion': self,
'replies': [reply.html() for reply in self.replies.all()]
}))
DiscussionTemplate
<li>
{{ discussion.message }}
{% if replies %}
<ul>
{% for reply in replies %}
{{ reply }}
{% endfor %}
</ul>
{% endif %}
</li>
Wie Sie haben wir 2 Felder userUpVotes und userDownVotes auf dem Modell sehen kann, werden diese berechnen, wie die Diskussionen und Antworten bestellen.
Wie würde ich diese 2 Felder implementieren, um die Antworten und Diskussionen basierend auf Stimmen zu bestellen?
Jede Hilfe wäre großartig!
EDIT
Ich habe eine Methode, um mein Modell vote_difference
def vote_difference(self):
return int(self.userUpVotes.count()) - int(self.userDownVotes.count())
Ich kann Benutzer dies in meinen Vorlagen genannt hinzugefügt, um die aktuelle Abstimmung zu bekommen, ich aber kann dies nicht in meiner Ansicht verwenden .py-Datei, um nach diesem Wert zu sortieren, ist dieser Wert in meiner Ansicht enthalten?
EDIT (2)
ich es langsam habe immer, ich brauche zwei Felder mit Anmerkungen versehen und eine Berechnung für sie tun, aber es scheint, dass ich nicht einfach mit annotate Mathematik Berechnung tun.
Irgendwelche Ideen?
discussions = game.gamediscussion_set.filter(reply_to=None).annotate(score= (Count('userUpVotes') - Count('userDownVotes'))).order_by('-score')
so, wie Sie mit diesem weit sind? –