如何获取每个auth.user的对象数?

时间:2009-10-28 18:24:02

标签: django django-models django-aggregation

我的项目模型类似于:

class Project(models.Model):
    ...
    lead_analyst=models.ForeignKey(User, related_name='lead_analyst')
    ...

我想使用django聚合来返回每个用户拥有项目数的所有用户。类似的东西:

models.User.objects.annotate(project_count=Count('project_set'))

只有这不起作用,因为auth.user不了解我的Project类。我收到错误:

  

无法将关键字'project_set'解析为字段。选项包括:date_joined,email,employee,first_name,groups,id,is_active,is_staff,is_superuser,last_login,last_name,lead_analyst,logentry,message,password,siteprofile,submitter,user_permissions,username

两部分问题,真的:

  1. 如何按auth.user

  2. 获取此项目数
  3. 有没有更好的方法来编写我的Project类和auth.user类之间的关联,以使这种聚合可行?

  4. 或者我应该闯入原始sql进行聚合(通过django中的原始sql或数据库中的视图)?

1 个答案:

答案 0 :(得分:4)

您的模型没有任何问题 - 这正是如何建立这种关系的。问题只是你在外键中指定了related_name,因此就用户而言,没有project_set - 而是lead_analyst。实际上,您可以在错误消息给出的字段列表中看到这一点。

因此,您的汇总查询应为:

models.User.objects.annotate(project_count=Count('lead_analyst'))

(我必须说,我认为你在这里选择了一个误导性的相关名称 - 你最好坚持默认,在这种情况下你的原始语法会起作用。)