def save(self, *args, **kwargs): """ If new answer, add answer to the zcard with a score of 0 """ create_key = False if not self.pk: create_key = True super(Answer, self).save(*args, **kwargs) if create_key: red = get_redis_connection() red.zadd(self.question.redis_key, 0, self.pk)
def get_context_data(self, **kwargs): """ Get answer rankings from Redis and return a sorted list of answers in the context. """ context = super(QuestionDetailView, self).get_context_data(**kwargs) obj = self.get_object() red = get_redis_connection() ranked_pk_list = red.zrevrange(obj.redis_key, 0, -1) if not ranked_pk_list: return context answers = Answer.objects.in_bulk(ranked_pk_list) context.update({"ranked_answers": [ answers[int(rank)] for rank in ranked_pk_list]}) return context
def score(self): """ Return the answer's score from Redis """ red = get_redis_connection() return red.zscore(self.question.redis_key, self.pk)
def upvote(self): """ Increment the answers score by 1 """ red = get_redis_connection() return red.zincrby(self.question.redis_key, self.pk, 1)