Джанго + заказ по количеству комментариев - PullRequest
2 голосов
/ 11 мая 2011

Кто-нибудь знает, что такое решение для получения экземпляров модели с комментариями, упорядоченной по количеству комментариев?

Я смотрю на класс модели комментариев, и он использует:

    content_type   = models.ForeignKey(ContentType,
            verbose_name=_('content type'),
            related_name="content_type_set_for_%(class)s")
    object_pk      = models.TextField(_('object ID'))
    content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")

1 Ответ

1 голос
/ 11 мая 2011

Вот фрагмент кода, который может вам помочь:

http://djangosnippets.org/snippets/1101/

from django.contrib.contenttypes.models import ContentType
from django.contrib.comments.models import Comment
from django.db import connection

qn = connection.ops.quote_name

def qf(table, field): # quote table and field
    return '%s.%s' % ( qn(table), qn(field) )

def comments_extra_count(queryset):

    commented_model = queryset.model
    contenttype = ContentType.objects.get_for_model(commented_model)
    commented_table = commented_model._meta.db_table
    comment_table = Comment._meta.db_table

    sql = '''SELECT COUNT(*) FROM %s
        WHERE %s=%%s AND %s=%s
    ''' % (
        qn(comment_table),
        qf(comment_table, 'content_type_id'),
        qf(comment_table, 'object_pk'),
        qf(commented_table, 'id')
    )

    return queryset.extra(
        select={'comment_count': sql },
        select_params=(contenttype.pk,)
    )

Вы можете реализовать все это inline без определения этих методов.Конечным результатом является аннотированный набор запросов с дополнительным атрибутом comment_count.Сортировать:

qs_sorted_by_comment_count = comments_extra_count(some_qs).order_by('comment_count')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...