在继承的Django模型中保存数据

0 投票
1 回答
2732 浏览
提问于 2025-04-16 09:36

我正在开发一个应用程序,用来保存数据以及基于这些数据进行的一些计算。我的想法是把数据放在一个模型里,把计算放在另一个模型里。所以,模型的结构是这样的:

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 继承 nameonetwo 这些字段。如果你只是想把计算结果存到一个单独的模型中,那就只需保存一个指向原始数据的引用,像这样:

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

撰写回答