Django ORM:如何与ann一起使用Counter

2024-05-19 21:56:37 发布

您现在位置:Python中文网/ 问答频道 /正文

tltr公司

考虑电子邮件列表:

list = ['a@a.com', 'b@a.com', 'b@a.com', 'a@a.com', 'c@a.com', 'a@a.com']

考虑到使用这些电子邮件的用户的查询集,如何使用annotate来计算此列表中用户电子邮件的出现次数?你知道吗

如果我试试这个:

users = User.objects.all()
users.values('email').annotate(email_in_list=Count('email))

结果是每个用户的1。 我希望每个用户都能得到以下结果:

你知道吗地址:a@a.com-三

你知道吗邮箱:b@a.com-二

你知道吗邮箱: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)

现在我如何才能看到有多少被引用的用户有一个referer?你知道吗

我试过但没有成功:

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)

编辑:考虑计数()

我试过这个:

referer_users.values('user__email').annotate(refered_num=count('user__email'))

但是refered_num的值总是等于1,这是合乎逻辑的,因为在refered_num查询中,我们只有每个用户对象有一封电子邮件。你知道吗

如何计算referer电子邮件在refered_user列表中的出现次数,并在referer_users查询中对其进行注释?你知道吗


Tags: 用户com列表objectsmodels电子邮件emailusers
2条回答
from django.db.models import Count
referer_users = referer_users.order_by()
referer_users = referer_users.values('email')
referer_users = referer_users.annotate(refered_num=Count('email'))

我想你是在加order_by('id'),这就是为什么它会加1。添加顺序时,它也会添加到group by字段。你知道吗

好吧,您不会用Counter来完成,这是一个用于计算现有Python集合中不同项的Python类。您需要使用DjangoCount函数:

from django.db.models import Count
referer_users.values('email').annotate(refered_num=Count('email'))

相关问题 更多 >