我有两个模型如下:
Foo(models.Model):
total = models.IntegerField()
Bar(models.Model):
foo = models.ForeignKey(Foo)
number = models.Interger()
当我保存Foo模型时,更新总字段的最佳解决方案是什么,这是Bar模型中数字的总和?
我已经尝试覆盖Foo模型上的保存方法,并且因为Bar没有保存但它没有计算最近的数字(我本应该保存两次)
答案 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()