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