Интересно, можно ли изменить этот запрос, чтобы он возвращал User объекты вместо merchant_id (User).
User
merchant_id
(User.objects.get(id=merchant['merchant_id']) for merchant in self.user.visits.values('merchant_id').distinct())
Вы создаете 1 запрос БД для каждого поиска пользователя (который является торговцем?). Нужно освежить мою Django ORM, но я бы сделал что-то вроде:
User.objects.filter(id__in=[ merchant['merchant_id'] for merchant in self.user.visits.values('merchant_id').distinct() ])
Как это звучит?
merchants_visited = self.user.visits.merchants.all().distinct() return User.objects.filter(visits__merchants__in=merchants_visited, profile=self)