Django:注释相关字段列表
Django: Annotate list of related fields
我有一个 Company 和 User 模型以及相关模型 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.
如果您需要类似于示例代码中注释部分的输出,您可能应该查询 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'))
我有一个 Company 和 User 模型以及相关模型 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.
如果您需要类似于示例代码中注释部分的输出,您可能应该查询 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'))