Django: аннотировать список связанных полей
У меня есть модели Company и User со связанной моделью CompanyRecruiter:
class CompanyRecruiter(models.Model):
organization = models.ForeignKey(Company, related_name="company_recruiters")
recruiter = models.ForeignKey(User, related_name="company_recruiters")
Я хочу аннотировать список идентификаторов пользователей, которые являются рекрутерами компаний, чтобы иметь возможность фильтровать их позже:
Company.objects.annotate(some_stuff=some_other_stuff).values_list("user_ids", flat=True)
# [ [1, 2], [1, 56], [] ]
Я уже безуспешно пробовал использовать настраиваемые агрегаты и подзапросы. Я использую postgres.
1 ответ
Решение
Если вам нужен вывод, аналогичный закомментированному разделу в вашем примере кода, вам, вероятно, следует запросить 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'))