gpt4 book ai didi

django - 我可以使用 Django ORM 获得 PostgreSQL 查询的这个结果吗?

转载 作者:行者123 更新时间:2023-12-04 07:53:52 25 4
gpt4 key购买 nike

我在使用 时遇到问题Django ORM .
我想获取可以使用 获得的数据PostgreSQL 原始 sql 查询 在 View 中。但是是否有任何解决方案可以使用 来实现这一点? Django ORM .
这是我的模型

class Invoice(models.Model):
class PaymentMode(models.TextChoices):
Cash = 0, _('CASH')
Credit = 1, _('CREDIT')

class PaymentStatus(models.TextChoices):
Paid = 0, _('PAID')
Pending = 1, _('PENDING')

total_amount = models.IntegerField()
payment_mode = models.CharField(choices=PaymentMode.choices,
max_length=20,
default=PaymentMode.Credit)
payment_status = models.CharField(choices=PaymentStatus.choices,
default=PaymentStatus.Pending,
max_length=15)
print_date = models.DateField(default=now)
invoice_date = models.DateField(default=now)
created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING)
customer = models.ForeignKey(Customer, on_delete=models.DO_NOTHING)


class Payment(models.Model):
class PaymentMethod(models.TextChoices):
Cash = 0, _('CASH')
Cheque = 1, _('CHEQUE')
OnlineTransfer = 2, _('WEB_TRANSFER')
Other = 3, _('OTHER')

invoice = models.ForeignKey(Invoice,
on_delete=models.DO_NOTHING,
default=0)
amount = models.IntegerField()
date = models.DateField(default=now)
recieved_by = models.CharField(max_length=150)
payment_method = models.CharField(choices=PaymentMethod.choices,
default=PaymentMethod.Cash,
max_length=20)

这是我的 PostgreSQL 询问
SELECT 
A.id ,
A.total_amount ,
A.payment_mode,
A.payment_status,
A.print_date,
A.invoice_date,
A.created_by_id,
A.customer_id,
coalesce(SUM(P.amount), 0) AS "paid",
(A.total_amount - coalesce(SUM(P.amount), 0)) As "remaining"
FROM
public."Invoicing_invoice" as A
LEFT JOIN public."Invoicing_payment" as P
ON P.invoice_id = A.id
GROUP BY A.id

最佳答案

您可以使用以下注释进行注释:

from django.db.models import F, Sum, Value
from django.db.models.functions import Coalesce

Invoice.objects.annotate(
paid=Coalesce(Sum(payment__amount), Value(0)),
remaining=F('total_amount') - Coalesce(Sum(payment__amount), Value(0))
)
Invoice从此查询集产生的 s 将有两个额外的属性 .paid.remaining与发票的已付金额和剩余金额。

关于django - 我可以使用 Django ORM 获得 PostgreSQL 查询的这个结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66805701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com