Сортировка по родовым отношениям - альтернатива django-generic-aggregation для больших наборов запросов?

Мои модели:

class Article(models.Model):
    title = models.CharField(max_length=255)
    
    # reverse generic relation
    comments = GenericRelation(Comment, object_id_field='object_pk')


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

Я хотел бы сортировать статьи по количеству комментариев. До сих пор я использовал библиотеку django-generic-aggregation (https://django-generic-aggregation.readthedocs.io/en/latest/) и сделал следующее:

qs = generic_annotate(
    self.queryset,
    Comment.objects.filter(public=True),
    Count("comments__comment"))

Этот подход хорошо работал, когда количество статей было небольшим. При увеличении количества статей (более 10-20.000) он становится слишком медленным.

Есть идеи, как отсортировать список статей по количеству комментариев, если список статей большой?

Вернуться на верх