将数据保存在继承的django模型中

时间:2011-01-07 22:13:44

标签: python django django-models

我正在构建一个应用程序来保存数据和使用该数据进行的一些计算,其想法是将数据保存在一个模型中,将计算保存在其他模型中。所以,模型是这样的:

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有更好/更简单的方式来存储相关数据。

1 个答案:

答案 0 :(得分: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()

除此之外,我不确定您为什么需要在示例FreshDataCalculations延伸,而是继承nameonetwo字段FreshData。如果您只想将计算存储在单独的模型中,那么只需将引用存储回原始数据,如下所示:

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)
    ...