managers.py 1.18 KB

from django.db import models

from haystack.query import SearchQuerySet


class NotSpamManager(models.Manager):
    """Only return objects which are not marked as spam."""

    def get_query_set(self):
        return super(NotSpamManager, self).get_query_set().exclude(spam=True)


class HighestScore(NotSpamManager):
    def get_query_set(self):
        queryset = super(HighestScore, self).get_query_set()
        return queryset.order_by('-score', '-latest_message__received_time')

    def from_haystack(self):
        return SearchQuerySet().filter(type='thread')


class MostVotedManager(NotSpamManager):
    def get_query_set(self):
        """Query for the most voted messages sorting by the sum of
        voted and after by date."""

        queryset = super(MostVotedManager, self).get_query_set()

        sql = """
            SELECT
                count(sav.id)
            FROM
                super_archives_vote AS sav
            WHERE
                super_archives_message.id = sav.message_id
        """

        messages = queryset.extra(
            select={
                'vote_count': sql,
            }
        )
        return messages.order_by('-vote_count', 'received_time')