Hay Мне нужно перенести внедрение системы голосования в модель.голосование в стиле reddit с django
У меня была огромная помощь от Майка Де Симона, делающего эту работу в первую очередь, но мне нужно расширить его работу.
Вот мой текущий код
Посмотреть
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)
Шаблон
Модель
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>
Как вы можете видеть, у нас есть 2 поля userUpVotes и userDownVotes на модели, они будут рассчитывать, как заказать обсуждения и ответы.
Как я могу реализовать эти 2 поля для заказа ответов и обсуждений на основе голосов?
Любая помощь будет замечательной!
EDIT
Я добавил метод моей модели под названием vote_difference
def vote_difference(self):
return int(self.userUpVotes.count()) - int(self.userDownVotes.count())
Я могу пользователю это в моих шаблонах, чтобы получить текущий голос, однако я не могу использовать это на мой взгляд, .py для заказа по этому значению, так или иначе, чтобы включить это значение в мое представление?
EDIT (2)
Я медленно попасть туда, мне нужно аннотировать 2 поля и сделать расчет на них, однако, кажется, что я не могу сделать расчет базовой математике с аннотирования.
Любые идеи?
discussions = game.gamediscussion_set.filter(reply_to=None).annotate(score= (Count('userUpVotes') - Count('userDownVotes'))).order_by('-score')
так, как далеко вы получите с этим? –