2011-01-07 52 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