我正在使用发票和付款模式,尝试根据发票付款确定应支付多少钱。
我想出了以下内容,利用了Sqlalchemy的column_proprty:
# Total amount for an Invoice
Invoice.total_rands = column_property(
select([func.sum(InvoiceProduct.sub_total_rands)]).where(InvoiceProduct.invoice_id==Invoice.id).correlate(Invoice)
)
# Total amount which needs to be paid.
Invoice.amount_due_rands = column_property(
Invoice.total_rands - select([func.sum(Payment.amount_rands)]).where(Payment.invoice_id==Invoice.id).correlate(Invoice)
)
上述代码的问题在于,如果发票没有付款,则发票的金额为“发票金额”。是None,不等于Invoice.total_rands。
所以我猜我有两个问题:
如果没有发票付款,如何(使用我当前的解决方案)可以让Invoice.amount_due_rands column_proprty返回Invoice.total_rands。
我还能如何处理这个问题?
答案 0 :(得分:0)
Invoice.amount_due_rands = column_property( Invoice.total_rands - 选择([func.coalesce(func.sum(Payment.amount_rands),0)])。其中(Payment.invoice_id == Invoice.id).correlate(Invoice) )