Сортировка по родовым отношениям - альтернатива 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) он становится слишком медленным.
Есть идеи, как отсортировать список статей по количеству комментариев, если список статей большой?