Django:注释相关字段列表

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

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

关于Django:注释相关字段列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61863132/

相关文章:

django - 从 django admin 中的 URL 预填充 DateTimeField

python - 如何在不使用原始 SQL 的情况下按foreignkey对象的数量过滤对象?

Django 查询 - 是否可以在数据库级别按公共(public)字段对元素进行分组?

django - 从 Django 的 ArrayAgg 中排除空值

Django 使用 Postgres 在 JSONField 中注释计数

python - Django 模型 : Find Avg by Grouping from models

python - 在 Django Rest Framework 中添加特定的方法处理程序 detail_route

python - django迁移中如何获取当前数据库?

python - 密码验证在 django-rest-framework 中不起作用

django - 计算时间段的平均汇率