您可以实现您想要的目标,但这将是不必要的低效(甚至比您发布的SQL查询还要低效)。由于您当前的模型结构是相当扭曲的,如果您可以更改模型,您应该。
Precipitation
数据输入到
Level
查询。每个字段和行需要一个子查询:
from django.db.models import Q, OuterRef, Subquery
join_criteria = Q(
observation_id=OuterRef('observation_id'),
observation_datetime = OuterRef('observation_datetime')
)
subquery_precipitation = Subquery(Precipitation.objects
.filter(join_criteria)
.values('precipitation')[:1])
subquery_precipitation_type = Subquery(Precipitation.objects
.filter(join_criteria)
.values('precipitation_type')[:1])
levels = (Level.objects
.annotate(precipitation=subquery_precipitation)
.annotate(precipitation_type=subquery_precipitation_type))
现在尝试将字段数乘以查询中的预期行数,即需要执行的子查询数。
所以这是一个概念证明,你可以在紧要关头用在小表和一些字段上。它不适合于大数据集和许多领域。你真的应该重新考虑你的模式。
有了合适的模型,实现你所需要的应该很容易。