TypeError(“无法将%r转换为十进制”%value)TypeError:无法将<lenderinvestment:20000.00 =“”>转换为十进制

时间:2016-10-28 12:30:38

标签: django

class LenderInvestment(models.Model):
    user = models.ForeignKey(User)
    investment = models.DecimalField(max_digits=15, decimal_places=2, default=1000000)
    initial_capital = models.DecimalField(max_digits=12, decimal_places=2, **optional)

    def __unicode__(self):
        return str(self.initial_capital)

class LoanDisbursement(models.Model):
    user = models.ForeignKey(User)
    initial_capital = models.OneToOneField(LenderInvestment)
    loan_applicant = models.ForeignKey(LoanApplication)
    money_disbursed = models.DecimalField(max_digits=10, decimal_places=2)


    def __unicode__(self):
        return str(self.user)


def loan_disbursement_receiver(sender, instance, *args, **kwargs):
    initial_capital = instance.initial_capital
    money_disbursed = instance.money_disbursed
    initial_capital = Decimal(initial_capital) - Decimal(money_disbursed)
    instance.initial_capital = initial_capital

pre_save.connect(loan_disbursement_receiver, sender=LoanDisbursement)

我有两个模型,如上所示,为了计算从一个模型实例到另一个我需要帮助的模型实例的值,当我连接上面时它给出了类型错误。期待一些积极的回复。

1 个答案:

答案 0 :(得分:1)

你有两个字段叫做同一个东西,你在它们之间感到困惑。您的信号在LoanDisbursement上调用,该模型有一个名为initial_capital的OneToOneField。该值无法转换为十进制,因为它是关系,而不是数字。

然而,与LenderInvestment, 有关系的模型有一个名为initial_capital的字段。 值是一个数字。您需要遵循信号中的关系,并在获取和设置值时使用该相关实例。

def loan_disbursement_receiver(sender, instance, *args, **kwargs):
    investment = instance.initial_capital
    investment.initial_capital -= money_disbursed

注意a)不需要将这些值转换为Decimal,因为它们已经是; b)不需要使用中间变量; c)你可以使用-=进行内联减法。

另请注意,根据您的使用情况,您可能需要在投资实例上调用save

最后请注意,如果你将OneToOneField称为它实际上是什么,这将会更加容易混淆;例如lender_investment