Django ORM 查询从 table 检索对象和从另一个外键相关 table 检索最新对象?
Django ORM query to retrieve objects from a table and most recent objects from another foreign-key-related table?
如何将下面的 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;
从 django>=1.8
开始,您可以使用 annotate
和 F
对象作为字段别名。对于聚合,您可以使用 aggregation features of the 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'
)
如何将下面的 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;
从 django>=1.8
开始,您可以使用 annotate
和 F
对象作为字段别名。对于聚合,您可以使用 aggregation features of the 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'
)