首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ORM复合查询

Django ORM复合查询
EN

Stack Overflow用户
提问于 2016-07-07 02:43:12
回答 1查看 1.5K关注 0票数 1

我有以下几种型号:

代码语言:javascript
复制
class Invoice(models.Model):
    amount = models.DecimalField()
    date = models.DateTimeField()


class InvoiceItem(models.Model):
    invoice = models.ForeignKey(Invoice)
    description = models.CharField(max_length=256)
    amount = models.DecimalField()

class PaymentDistribution(models.Model):
    item = models.ForeignKey(invoiceItem)
    amount = models.DecimalField()



select a.id,
a.amount,
a.amount-coalesce(sum(b.amount),0) as to_pay
from invoiceitems as a
left join paymentdistribution as b
on (a.id=b.invoiceitem_id)
group by a.id, a.amount
order by to_pay desc

这是一个简单的发票-项目结构.我希望能够在多个项目之间分发付款,并跟踪付款的分布情况。SQL查询为我提供了我可以支付的项目列表和我可以支付的最大金额。是否有一种方法可以使用纯ORM而不是原始SQL执行相同的查询?我试图避免使用原始SQL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-07 06:16:16

代码语言:javascript
复制
from django.db.models import F, Sum, Value as V
from django.db.models.functions import Coalesce

InvoiceItem.objects.values('id', 'amount').annotate(
    to_pay=F('amount') - Coalesce(Sum('paymentdistribution__amount'), V(0))
).order_by('-to_pay')

文档:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38236832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档