2009-10-28 13 views
1

我也有类似的项目模型:如何获取每个auth.user的对象数量?

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没有关于我的工程类的知识。我得到的错误:

Cannot resolve keyword 'project_set' into field. Choices are: 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. 获得项目的这个计数是否有更好的方式来写之间的联系我项目类和auth.user类会使这种聚合可行?

或者我应该闯入聚合的原始sql(无论是通过django中的原始sql或数据库中的视图)?

回答

4

您的模型没有错 - 这正是如何设置关系。问题很简单,你已经在foreignkey中指定了一个related_name,所以就用户而言,没有project_set - 而是有一个lead_analyst。事实上,您可以在错误消息给出的字段列表中看到这一点。

所以您汇总查询应为:

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

(我必须说,我觉得你在这里选择了一个误导性相关的名字 - 你会过得更好粘在默认情况下,在这种情况下,原来的语法会起作用。)

+0

嗯,我是一个frickin白痴... :-) related_name的原因是我有多个字段与该用户在该模型中相关。我只是没有在上面的代码片段中显示它们。 感谢您的帮助。 – cethegeek 2009-10-28 19:55:49

相关问题