2

我有一个带有相关模型 CompanyRecruiter 的公司和用户模型:

class CompanyRecruiter(models.Model):

    organization = models.ForeignKey(Company, related_name="company_recruiters")
    recruiter = models.ForeignKey(User, related_name="company_recruiters")

我想注释作为招聘人员的用户的用户 ID 列表,以便公司以后能够对其进行过滤:

Company.objects.annotate(some_stuff=some_other_stuff).values_list("user_ids", flat=True)
# [ [1, 2], [1, 56], [] ]

我已经尝试过使用自定义聚合和子查询但没有成功。我使用postgres。

4

1 回答 1

2

如果您需要类似于示例代码中注释部分的输出,您可能应该查询CompanyRecruiter模型:

recruiters = CompanyRecruiter.objects.values_list('organization', 'recruiter')
recruiter_list = [[o, r] for o, r in recruiters]

但是,在评论中,您已经表明您要专门查询Company模型。您应该可以使用 Postgresql 聚合函数ArrayAgg来做到这一点:

Company.objects.annotate(recruiter_ids=ArrayAgg('company_recruiters__recruiter'))
于 2020-05-18T10:31:09.060 回答