我正在使用 Django。我有三种不同的模型,具有这种父子布局:
申请人->申请->审核
一个申请人可以有多个申请,可以有多个审查。
我正在尝试编写一个包含名字、姓氏、应用程序 ID 以及与一个人相关联的评论数量的查询,这些评论可能没有到几个。我有以下查询语句:
list = MUSApplicant.objects.values(
'applicant', 'id', 'applicant__first_name',
'applicant__last_name', 'review').filter(department=department).annotate(acount=Count('review'))
这给了我这个 SQL:
SELECT apply_application.applicant_id,
apply_application.id,
apply_applicant.first_name,
apply_applicant.last_name,
apply_review.id,
COUNT(apply_review.id) AS acount
FROM apply_application
INNER JOIN apply_applicant
ON (apply_application.applicant_id = apply_applicant.id)
LEFT OUTER JOIN apply_review
ON (apply_application.id = apply_review.applicant_id)
WHERE apply_application.department = 'departmentname'
GROUP BY apply_application.applicant_id, apply_application.id, apply_applicant.first_name, apply_applicant.last_name, apply_review.id
这非常接近,但结果不正确——我最终得到了太多没有正确分组的行。我只希望它按 apply_review.id 分组,而不是其他所有内容。我怎样才能防止它在我的 GROUP BY 语句中添加所有这些额外的东西?
我无休止地盯着文档无济于事。有时很难将您的确切数据模型与那里的几个示例相匹配,以便学习任何东西。
编辑:这是模型:
class Review(models.Model):
reviewer_eid = models.CharField(max_length=20)
applicant = models.ForeignKey('Application')
overall_score = models.FloatField()
category1 = models.FloatField()
category2 = models.FloatField()
category3 = models.FloatField()
comments = models.TextField()