gpt4 book ai didi

python - Django 模型,用属性覆盖保存方法或自定义方法

转载 作者:太空狗 更新时间:2023-10-29 21:05:05 29 4
gpt4 key购买 nike

我正在处理一些必须返回模型字段总和的模型。是覆盖模型上的保存方法更好还是只创建一个返回总和的自定义方法。这两种解决方案是否存在任何性能问题?

选项 1:覆盖保存方法。

class SomeModel(models.Model):
integer1 = models.IntegerField()
integer2 = models.IntegerField()
integer3 = models.IntegerField()

sum_integers = models.IntegerField()

def save(self, *args, **kwargs):
self.sum_integers = sum(
[self.integer1, self.integer2, self.integer3])
self.sum_integers.save()
return super(SomeModel, self).save(*args, **kwargs)

选项2:自定义方法

class SomeModel(models.Model):
integer1 = models.IntegerField()
integer2 = models.IntegerField()
integer3 = models.IntegerField()

@property
def sum_integers(self):
return sum([self.integer1, self.integer2, self.integer3])

最佳答案

答案取决于您使用 sum_integers 的方式。如果你将它作为一个字段保存在数据库中,你将能够对其进行查询,并且使用属性这将非常棘手。

另一方面,如果您不打算进行查询并且此数据对您没有值(value)(换句话说 - 您需要 sum_integers 作为数据表示)那么你应该选择属性(property)。

从应用性能来看:如果您要对数千个对象进行复杂操作 - 最好将值存储在列中或至少将属性更改为 cached_property如果它被调用了几次。

作为总结 - 在数据库列中存储总和的值更通用并且没有任何降级,但在某些情况下 property 方法允许您保持数据模型更干净并节省一些空间在你的磁盘上。

希望这是您问题的答案。如有不明之处,请随时提出问题。

关于python - Django 模型,用属性覆盖保存方法或自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354500/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com