транслятор
С учетом списка писем:
list = ['a@a.com', 'b@a.com', 'b@a.com', 'a@a.com', 'c@a.com', 'a@a.com']
Учитывая набор запросов Пользователей, использующих эти электронные письма, как я могу использовать аннотацию для подсчета вхождений электронных писем Пользователей в этом списке?
Если я попробую это:
users = User.objects.all()
users.values('email').annotate(email_in_list=Count('email))
результат равен 1
для каждого пользователя.
Я ожидаю эти результаты для каждого пользователя:
* 10101 * a@a.com - 3
* 10101 * b@a.com - 2
* 10101 * c@a.com - 1
Начальный вопрос
Я хочу посмотреть, сколько у зарегистрированных пользователей есть пользователь:
refered_user = Profile.objects.filter(user__groups__name="Refered")
list = refered_user.values_list('referer_email')
# Getting all the referers who actually had refered users
referer_users = Profile.objects.filter(user__groups__name="Referer", user__email__in=list)
Теперь, как я могу узнать, сколько у реферируемых пользователей есть реферер?
Я пробовал это безуспешно:
counter = Counter(refered_user)
referer_users.values('user__email').annotate(refered_num=counter['user__email'])
По запросу, вот модели:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
referer_email = models.CharField(verbose_name='Email Referer', max_length=99, blank=True)
РЕДАКТИРОВАТЬ: с учетом Count ()
Я пробовал это:
referer_users.values('user__email').annotate(refered_num=count('user__email'))
Но значение refered_num
всегда равно 1, что логично, поскольку в запросе refered_num
у нас есть только объекты User с одним адресом электронной почты для каждого.
Как я могу посчитать вхождения электронной почты реферера в списке refered_user
и аннотировать его в моем запросе referer_users
?