我正在构建一个应用程序来保存数据和使用该数据进行的一些计算,其想法是将数据保存在一个模型中,将计算保存在其他模型中。所以,模型是这样的:
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有更好/更简单的方式来存储相关数据。
答案 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()
除此之外,我不确定您为什么需要在示例FreshData
中Calculations
延伸,而是继承name
,one
和two
字段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)
...