2011-01-07 53 views
0

我正在構建一個應用程序來保存數據和使用該數據進行的一些計算,這個想法是將數據保存在一個模型中,並將計算保存在其他模型中。因此,該機型是這樣的:將數據保存在繼承的django模型中

class FreshData(models.Model): 
    name = models.CharField(max_length=20) 
    one = models.IntegerField() 
    two = models.IntegerField() 

    def save(self, *args, **kwargs): 
     Calculations() 
     Calculations.three = self.one + self.two 
     super(FreshData, self).save(*args, **kwargs) 
     Calculations.save() 

class Calculations(FreshData): 
    three = models.IntegerField() 

我有一個ValueError抱怨「self.one」和「self.two」是沒有價值。我相信我的設計存在缺陷/錯誤,django有更好/更簡單的方法來存儲相關數據。

回答

2

你剛剛實例化了一個類,但沒有將calculations()存儲在一個變量中,再加上你的類名稱大寫字母。您的super呼叫也不正確,它需要引用您的模型,而不是Blog

原因self.one可能沒有值是因爲您在調用超級保存調用之前正在做這項工作。因此,在保存「你的自我」之後做你的工作。

class FreshData(models.Model): 
    name = models.CharField(max_length=20) 
    one = models.IntegerField() 
    two = models.IntegerField() 

    def save(self, *args, **kwargs): 
     super(FreshData, self).save(*args, **kwargs) 
     calculations = Calculations() 
     calculations.three = self.one + self.two 
     calculations.save() 

class Calculations(FreshData): 
    three = models.IntegerField() 

除此之外,我不知道爲什麼你需要從FreshData在你的榜樣Calculations延長將從FreshData繼承nameonetwo領域。如果你想計算僅存儲在一個單獨的模型,然後只存儲一個參考回到原來的數據,像這樣:

class Calculations(models.Model): 
    fresh_data = models.ForeignKey(FreshData) 
    three = models.IntegerField() 

然後只需確保實例化時fresh_data通過您Calculations

def save(self, *args, **kwargs): 
    super(FreshData, self).save(*args, **kwargs) 
    calculations = Calculationrs(fresh_data=self) 
    ... 
+0

我忘了說當我在「FreshData」中保存一條記錄時,我想在「Calculated」中自動保存「three」。用外國人我可以這樣做嗎? – aldeano 2011-01-08 03:52:14