top_users = CustomUser.objects.prefetch_related('deals__gems').order_by('-summ_spent_money')[:5]
all_users = CustomUser.objects.prefetch_related('deals__gems').order_by('-summ_spent_money')
gems_top = all_users.values_list('deals__gems__type_gems',
flat=True).filter(username__in=[top_user.username for top_user in top_users])
Это на выходе дает gems_top(<QuerySet ['Бирюза', 'Танзанит', 'Жемчуг', 'Рубин', 'Сапфир', 'Петерсит', 'Опал', 'Сапфир', 'Цаворит', 'Кварц', 'Петерсит', 'Аметрин', 'Танзанит', 'Яшма', 'Марганит', 'Лунный камень', 'Изумруд', 'Рубин', 'Изумруд']>)
Из этого queryr set надо убрать одиночные значени, annotate не помогает