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()