1

我有一个类似于以下的项目模型:

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_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. 有没有更好的方法来编写我的 Project 类和auth.user使这种聚合可行的类之间的关联?

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

4

1 回答 1

4

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

所以你的聚合查询应该是:

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

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

于 2009-10-28T19:46:06.660 回答