开发者

Saving data in a inherited django model

开发者 https://www.devze.com 2023-02-02 22:15 出处:网络
I\'m building an app to save data and some calculations made with that data, the idea is keep the data in one model and the calculations in other. So, the models are like this:

I'm building an app to save data and some calculations made with that data, the idea is keep the data in one model and the calculations in other. So, the models are like this:

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

I've got a ValueError complaining that "self.one" and "self.two" are without values. I believe my design is flawed/wrong and django has a better/simpler way to store related data.


You have just instantiated a class but not stored calculations() in a variable, plus give your class names capital letters. Also your super call is incorrect, it needs to reference your model and not Blog.

The reason self.one probably doesn't have a value is because you are doing the work before the call to the super save call. So instead do your work after saving "your 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()

Besides that I am not sure why you need to extend from FreshData in your example Calculations would inherit the name, one and two fields from FreshData. If you wanted to store the calculations only in a separate model then just store a reference back to the original data like so:

class Calculations(models.Model):
    fresh_data = models.ForeignKey(FreshData)
    three = models.IntegerField()

Then just make sure to pass in fresh_data when instantiating your Calculations:

def save(self, *args, **kwargs):
    super(FreshData, self).save(*args, **kwargs)
    calculations = Calculationrs(fresh_data=self)
    ...
0

精彩评论

暂无评论...
验证码 换一张
取 消