如何在Subquery()上使用内部联接?

2024-09-29 05:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号:

class FirstModel(models.Model():
    some_fields...

class SecondModel(models.Model):
    date = models.DateTimeField()
    value = models.IntegerField()
    first_model = models.ForeignKey(to="FirstModel", on_delete=models.CASCADE)

我需要执行以下查询:

select sum(value) from second_model

inner join (
   select max(date) as max_date, id from second_model
   where date < NOW()
   group by id
) as subquery
on date = max_date and id = subquery.id

我想我可以用Subquery

subquery = Subquery(SecondModel.objects.values("first_model")
            .annotate(max_date=Max("date"))
            .filter(date__lt=Func(function="NOW")))

F() expressions但它只能解析模型字段,不能解析子查询

问题:

是否可以只使用Django ORM实现

另外,我是否可以通过注释该值来计算第一个模型中所有值的第二个模型的值之和?像

FirstModel.objects.annotate(sum_values=sum_with_inner_join_query).all()

Tags: 模型iddatemodelvalueonmodelsmax