我遇到一个问题,无法解决。我不知道如何使用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,我试图获取一个列表,其中每笔贷款都通过注册显示,我必须显示的信息是:贷款编号,借入资金,借贷日期,百分比,客户,资本付款,折扣和资本余额。
对我来说,以前的字段用粗体显示是非常困难的,因为折价和资本支付的值都增加了一倍,这当然会影响资本余额字段。这是由于左连接会自动生成Django ORM
我正在使用django更新和python 3.6,mysql 5.5
我正在使用的django查询如下:
但是,先前使用ORM的查询为我带来了计算错误的列表。
我不想使用sql查询,但是要使用ORM。但是,根据需要提供给我数据的SQL查询如下:
它带给我以下数据:
https://i.stack.imgur.com/u9tM6.png
“借入资本”是“贷款”表中的字段,贷记资本,是贷款拥有且在贷记表中的还款额之和,在折扣表中找到折扣。考虑到先前的数据,我计算出满足以下数学公式的资本结余:资本结余=贷款价值-(贷项+折扣)
非常感谢。