在继承的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有更好或更简单的方法来存储相关的数据。
相关问题:
1 个回答
2
你刚刚创建了一个类,但没有把 calculations() 的结果存到一个变量里。另外,给你的类起名字的时候要用大写字母。还有,你的 super 调用不对,它应该指向你的模型,而不是 Blog。
至于 self.one 可能没有值的原因,是因为你在调用 super 的保存方法之前就进行了操作。所以,应该在保存“你的 self”之后再进行操作。
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 继承 name、one 和 two 这些字段。如果你只是想把计算结果存到一个单独的模型中,那就只需保存一个指向原始数据的引用,像这样:
class Calculations(models.Model):
fresh_data = models.ForeignKey(FreshData)
three = models.IntegerField()
然后在创建你的 Calculations 时,确保传入 fresh_data:
def save(self, *args, **kwargs):
super(FreshData, self).save(*args, **kwargs)
calculations = Calculationrs(fresh_data=self)
...