Python Django:统计在';太多了

Python Django:统计在';太多了,python,sql,django,Python,Sql,Django,给定一个模型: class Workshop(models.Model): title = models.CharField(max_length=40) participants = models.ManyToManyField(User, null=True, blank=True) (用户是django.contrib.auth.models.User) 用户可以参加多个车间: w1.参与者=(u1,u2) w2.参与者=(u2,u3) 我需要找到:1)参加1个研讨

给定一个模型:

class Workshop(models.Model):
    title = models.CharField(max_length=40)
    participants = models.ManyToManyField(User, null=True, blank=True)
(用户是django.contrib.auth.models.User)

用户可以参加多个车间:

  • w1.参与者=(u1,u2)

  • w2.参与者=(u2,u3)

我需要找到:
1)参加1个研讨会的用户数(u1,u3)
2)参加2个研讨会的用户数(u2)
3)不参加任何研讨会的用户数(u0)


谁能帮我一下吗?
非常感谢

这应该满足您的要求:

workshop_user_dict = {}
user_objects = User.objects.all()
for user in user_objects:
     workshops_count = user.workshop_set.all().count()
     if not workshops_count in workshop_user_dict:
         workshop_user_dict[workshops_count] = []
     workshop_user_dict[workshops_count].append(user)


for key, list in workshop_user_dict.items():
    print 'There are ' + str(len(list)) + ' users that are participating in ' + str(key) +  ' workshops'
试试这个:

from django.db.models import Count
(一)

(二)

(三)


您是否尝试与我们分享一些内容?谢谢您的尝试,但这没有帮助。我正在寻找表单的输出:
34个用户参加1个研讨会。14名用户参加了2个讲习班。60名用户未参加任何研讨会。
@user2262400更新了答案以实现您的愿望。:)让我知道它是否再次工作,谢谢!但是我没有测试它。我的问题是如何直接从数据库中获取数字,而无需对对象进行迭代,并使用最少的数据库调用。您的解决方案可能适用于没有许多用户的小型系统。
User.objects.annotate(workshop_count=Count('workshop')).filter(workshop_count=1).count()
User.objects.annotate(workshop_count=Count('workshop')).filter(workshop_count=2).count()
User.objects.filter(workshop__isnull=True).count()