复杂的Django查询,我不知道该怎么做

时间:2019-08-04 16:40:36

标签: python django django-models django-orm

我遇到一个问题,无法解决。我不知道如何使用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查询如下:

Query mYSQL

但是,先前使用ORM的查询为我带来了计算错误的列表。

我不想使用sql查询,但是要使用ORM。但是,根据需要提供给我数据的SQL查询如下:

它带给我以下数据:

https://i.stack.imgur.com/u9tM6.png

“借入资本”是“贷款”表中的字段,贷记资本,是贷款拥有且在贷记表中的还款额之和,在折扣表中找到折扣。考虑到先前的数据,我计算出满足以下数学公式的资本结余:资本结余=贷款价值-(贷项+折扣)

非常感谢。

0 个答案:

没有答案