gpt4 book ai didi

python - Django ORM : How to use Counter with annotate

转载 作者:行者123 更新时间:2023-12-01 01:26:05 26 4
gpt4 key购买 nike

tltr

考虑电子邮件列表:

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。我期望每个用户得到这些结果:

a@a.com - 3

b@a.com - 2

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 查询中对其进行注释?

最佳答案

嗯,你不会用 Counter 来做到这一点,这是一个用于计算现有 Python 集合中不同项目的 Python 类。您需要使用 Django Count 函数:

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

关于python - Django ORM : How to use Counter with annotate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com