Я хочу эффективно аннотировать объекты модели A
на основе некоторых полей в модели B
, которая имеет простое отношение «многие ко многим» (без использования сквозной модели), к A
.Складка в том, что я должен найти самую старую B
для каждого A
(используя B.created_timestamp
), но затем заполнить, используя B.name
.Я хочу использовать ORM, а не чистый SQL.
Я пробовал это, но это не правильно:
a_qs = A.objects.filter(id__in=ids)
ordered_qs = a_qs.order_by('-b__created_timestamp')
oldest_qs = Subquery(ordered_qs.values('b__name')[:1])
result = list(a_qs.annotate(name=oldest_qs))
Это аннотирует каждый A
с тем же самым старым именем B
во всехB
s относится к A
, но я хочу самый старый B
среди связанных B
s для каждого A
.