Доброго времени суток!
Имеется 2 модели - кастомная User и Interest. У каждого пользователя есть определенное количество интересов. Когда пользователь переходит на конкретную страницу, ему предлагается связаться с другими пользователями, с которыми у него наибольшее количество общих интересов.
class Interest(models.Model):
name = models.CharField(max_length=50, unique=True)
users = models.ManyToManyField(settings.AUTH_USER_MODEL,
related_name="interests", blank=True)
Для получения и сортировки используем след. метод:
def suggested_people(user):
queryset = User.objects.custom_filter(is_verified=True).order_by('-date_joined')
users_sorted = sorted(queryset, key=lambda x: x.get_common_interest(user).count(), reverse=True)
return users_sorted
Метод экземпляра класса User:
def get_common_interest(self, user):
""" Return a list of string with the interests and the total number remaining """
your_interests = user.interests.values_list('pk', flat=True)
return self.interests.filter(pk__in=your_interests)
Проблема в том, что спискок полученных объектов сортируется очень медленно (для 1000 пользователей около 8с). Какие есть возможные способы решения данной проблемы? Буду благодарен за любой совет!