如何在保存时不使用聚合更新总和字段?

时间:2015-06-27 15:08:09

标签: django django-models

我有两个模型如下:

Foo(models.Model):
    total = models.IntegerField()

Bar(models.Model):
    foo = models.ForeignKey(Foo)
    number = models.Interger()

当我保存Foo模型时,更新总字段的最佳解决方案是什么,这是Bar模型中数字的总和?

我已经尝试覆盖Foo模型上的保存方法,并且因为Bar没有保存但它没有计算最近的数字(我本应该保存两次)

1 个答案:

答案 0 :(得分:1)

我认为你最初的覆盖保存的想法应该有效。如果在Foo实例保存时进行操作,则按以下方式操作:

def save(self, *args, **kwargs):
    self.total = sum([x.number for x in self.bar_set.all()])
    super(Foo, self).save(*args, **kwargs)

如果您希望每次保存相关Bar实例时更新总数,那么您应该在Bar类上执行类似的覆盖:

def save(self, *args, **kwargs):
    super(Bar, self).save(*args, **kwargs)        
    self.foo.total = sum([x.number for x in self.foo.bar_set.all()])
    self.foo.save()