2016-10-28 31 views
0
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) 

我有兩個模型如上所示序從一個模型實例的值,以計算到另一個模型實例我需要幫助,當我連接上面時,它給出了類型錯誤。期待着一些積極的答覆。類型錯誤(「無法轉換%R到十進制的」%值)類型錯誤:無法轉換<LenderInvestment:20000.00>爲十進制

+0

請修復縮進。另外,你是否嘗試從'initial_capital' *中減去'money_disbursed'而不將*轉換爲小數? – elethan

+0

不帶小數點的錯誤是不支持的操作類型爲 - :「LenderInvestment」和「小數」 – Biju

回答

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)沒有必要將這些值轉換爲十進制,因爲它們已經是; b)不需要使用中間變量;和c)您可以使用-=進行內聯減法。

還要注意,這取決於你的使用情況,您可能需要調用save的投資實例。

最後,請注意,這都將是少了很多混亂,如果你叫OneToOneField它實際上是什麼;例如lender_investment

+0

我已經改變lenderinvestment如你所說,打印正顯示出減去價值,但我不知道怎麼救,我試了很多辦法不成功了。 – Biju

+0

高清loan_disbursement_receiver(發件人,例如,* ARGS,** kwargs): 投資= instance.lenderinvestment money_disbursed = instance.money_disbursed investment.initial_capital - = money_disbursed 打印investment.initial_capital pre_save.connect(loan_disbursement_receiver,發件人= LoanDisbursement ) – Biju

+0

您無法執行'investment.save()'? –

相關問題