考虑电子邮件列表:
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)
我已经尝试过了:
referer_users.values('user__email').annotate(refered_num=count('user__email'))
但是refered_num
的值始终等于1,这是合乎逻辑的,因为在refered_num
查询中,我们只有User对象,每个对象只有一封电子邮件。
如何计算refered_user
列表中引荐电子邮件的出现并在我的referer_users
查询中添加注释?
答案 0 :(得分:2)
好吧,您不会用Counter做到这一点,Counter是一个Python类,用于对现有Python集合中的不同项目进行计数。您需要使用Django Count
函数:
from django.db.models import Count
referer_users.values('email').annotate(refered_num=Count('email'))
答案 1 :(得分:0)
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
字段中。