Django ORM-запрос для извлечения объектов из таблицы и самых последних объектов из другой таблицы, связанной с внешним ключом? - PullRequest
0 голосов
/ 13 марта 2020

Как я могу перевести запрос SQL ниже в оператор Django ORM, чтобы получить те же поля?

SELECT 
    entity_a.id AS entity_a__id,
    entity_a.created_at AS entity_a__created_at,
    MAX(entity_b.last_update) AS max__entity_b__last_update,
    entity_b.id AS entity__b_id,
    entity_b.datadump AS entity_b__datadump
FROM
    entity_a
        INNER JOIN
    entity_b ON entity_a.id = entity_b.entity_a_id
WHERE
    entity_a.created_at < '2020-03-10'
GROUP BY entity_a.id;

1 Ответ

1 голос
/ 13 марта 2020

С django>=1.8 вы можете использовать annotate и F объект для псевдонима поля. Для агрегирования вы можете использовать функции агрегации ORM

from django.db.models import F, Max

EntityA.objects.annotate(
    entity_a__id=F('id'),
    entity_a__created_at=F('created_at'),
    entity__b_id=F('entity_b_id'),
    entity_b__datadump=F('entity_b__datadump'),
    max__entity_b__last_update=Max('entity_b__last_update')
).filter(
    created_at__lt='2020-03-10',
).values(
    'entity_a__id',
    'entity_a__created_at',
    'entity__b_id',
    'entity_b__datadump',
    'max__entity_b__last_update'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...