我的项目模型类似于:
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
两部分问题,真的:
如何按auth.user
有没有更好的方法来编写我的Project类和auth.user
类之间的关联,以使这种聚合可行?
或者我应该闯入原始sql进行聚合(通过django中的原始sql或数据库中的视图)?
答案 0 :(得分:4)
您的模型没有任何问题 - 这正是如何建立这种关系的。问题只是你在外键中指定了related_name
,因此就用户而言,没有project_set
- 而是lead_analyst
。实际上,您可以在错误消息给出的字段列表中看到这一点。
因此,您的汇总查询应为:
models.User.objects.annotate(project_count=Count('lead_analyst'))
(我必须说,我认为你在这里选择了一个误导性的相关名称 - 你最好坚持默认,在这种情况下你的原始语法会起作用。)