python - 复杂的django查询,我不知道怎么做
问题描述
我有一个让我头疼的问题,我无法解决。我不知道如何使用 Django ORM 进行查询以获得正确的结果。我用的是MySQL,情况如下:
楷模:
from django.db.models import Q,F,Sum, Value as V
from django.db.models.functions import Coalesce
from django.db.models.functions import Concat
class Prestamo(models.Model):
PENDIENTE = 1
PAGADO = 2
FUSIONADO = 3
ANULADO = 4
ESTADOS = (
(PENDIENTE, 'pendiente'),
(PAGADO, 'pagado'),
(FUSIONADO, 'fusionado'),
(ANULADO, 'anulado')
)
cliente = models.ForeignKey(Cliente, on_delete = models.CASCADE)
fecha_prestamo = models.DateField(default=timezone.now)
capital_prestado = models.FloatField()
meses_plazo = models.IntegerField()
porcentaje_aplicado = models.ForeignKey(Interes, on_delete=models.CASCADE)
valor_interes = models.FloatField(null=True)
saldo_capital = models.FloatField(null=True)
saldo_interes = models.FloatField(null=True)
tipo_prestamo = models.ForeignKey(TiposPrestamo, on_delete=models.CASCADE)
fecha_registro = models.DateTimeField(default=timezone.now)
prestamo_nuevo = models.ForeignKey('Prestamo', on_delete=models.CASCADE, blank= True, null=True)
#estado = models.ForeignKey(EstadoPrestamo, on_delete = models.CASCADE, blank= True, default=1)
estado = models.IntegerField(choices=ESTADOS, default=PENDIENTE, blank= True)
observaciones = models.TextField(max_length=150,blank=True)
usuario = models.ForeignKey(User, on_delete= models.CASCADE, default='')
def __str__(self):
return "{0},{1},{2}".format(self.fecha_prestamo, self.cliente, self.capital_prestado)
class Abono(models.Model):
prestamo = models.ForeignKey(Prestamo,on_delete=models.CASCADE)
fecha_abono = models.DateField(default=timezone.now)
valor_abono_capital = models.FloatField()
valor_abono_interes = models.FloatField()
observaciones = models.TextField(max_length=100,blank=True,null=True)
fecha_registro = models.DateTimeField(default=timezone.now)
estado = models.ForeignKey(EstadoAbono, on_delete = models.CASCADE, blank= True, null=True)
usuario = models.ForeignKey(User, on_delete= models.CASCADE, default='')
def __str__(self):
return "{0},{1}".format(self.fecha_abono, self.valor_abono_capital)
class Descuento(models.Model):
prestamo = models.ForeignKey(Prestamo,default=None,on_delete=models.CASCADE)
fecha_descuento = models.DateField(default=timezone.now)
valor_descuento = models.FloatField()
fecha_registro = models.DateTimeField(default=timezone.now)
descontadopor = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return "descuento: {0}, {1}".format(self.fecha_descuento, self.valor_descuento)
在数据库中,我有以下与以前模型相关的表的示例数据。
Prestamo https://i.stack.imgur.com/FqZ4b.png
阿博诺斯 https://i.stack.imgur.com/MUjRk.png
Descuentos https://i.stack.imgur.com/rAHW0.png
通过django ORM,我试图获得一个列表,其中每笔贷款都通过注册显示,我必须显示的信息是:loan_id,capital_借用,loan_date,百分比,客户,资本支付,折扣和资本余额
由于折扣和资本支付的价值都翻了一番,这当然会影响资本平衡字段,因此我很难显示之前以粗体显示的字段。这是由于自动生成django ORM的左连接
我正在使用 django 更新和 python 3.6、mysql 5.5
我正在使用的 django 查询如下:
但是,之前使用 ORM 的查询给我带来了计算不正确的列表。
我不想使用 sql 查询,而是使用 ORM。但是为我带来我需要的数据的 SQL 查询如下:
它给我带来了以下数据:
https://i.stack.imgur.com/u9tM6.png
借入资本是贷款表中的字段,贷记资本是贷款已经和贷记表中的付款总和,折扣在折扣表中找到。考虑到前面的数据,我计算出满足以下数学公式的资本余额: 资本余额 = loan_value - (credits + discounts)
非常感谢。
解决方案
推荐阅读
- android - 动态多个微调器“setOnItemSelectedListener()”在项目点击时不起作用 - Android
- media-source - mediasouce中什么mimeCodec兼容ie和火狐
- java - 从 Angular 10 中的 jar 运行小程序
- python - Python urllib3 AWS 弹性搜索连接错误
- python - 在遍历字符串中单词的每个字母后创建句子
- node.js - 在firebase云功能中为nodemailer创建自定义电子邮件模板?
- r - 如何在使用 rvest 在 R 中抓取时跳过空白页面?
- apache-kafka - RHEL 8 操作系统与 Apache Kafka 2.5.0 的兼容性
- python - 如何在 pandas 数据框中为每个公司的去年观察创建一个虚拟对象?
- javascript - 我可以在 ClickFunnel 的 URL 中传递联系表单参数吗?