【问题标题】:Django: Annotate list of related fieldsDjango:注释相关字段列表
【发布时间】:2020-09-03 20:53:01
【问题描述】:

我有一个 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。

【问题讨论】:

    标签: django django-aggregation django-annotate django-subquery


    【解决方案1】:

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

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

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

    Company.objects.annotate(recruiter_ids=ArrayAgg('company_recruiters__recruiter'))
    

    【讨论】:

    • 我需要在公司查询集上应用注释。查询 CompanyRecruiter 表将使我进行 2 次数据库调用,我希望将所有内容合二为一以提高效率。
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2015-09-06
    • 2013-12-07
    • 2014-05-18
    • 2017-08-29
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多