Django模型,用属性重写save方法或自定义方法

2024-09-25 06:35:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

选项1:重写save方法。在

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:自定义方法

^{pr2}$

Tags: 方法integers模型selfmodelssave选项args
2条回答

取决于你是要更新更多的字段还是需要更多地调用总和。在

为了使它更通用,我假设运算不仅是加法运算,而且是涉及大量数字的多重复杂计算。在

如果您必须时不时地得到总和,那么最好创建一个模型字段并在保存时增加值。在

如果您必须更新它,那么通常在调用时获取值(第二种方法)更合适

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

另一方面,如果您不打算进行查询,并且这些数据对您没有价值(换句话说,您需要和整数作为数据表示) 那你应该带着财产去。在

从应用性能来看: 如果要对数千个对象进行复杂的操作,那么最好将值存储在列中,或者至少在调用几次时将属性更改为cached_property。在

作为一个摘要-在DB column中存储sum的值更通用,并且没有任何降级,但是在某些情况下,property方法允许您保持数据模型的整洁,并在磁盘上节省一些空间。在

我希望这是你问题的答案。如果有不清楚的地方,请填写免费提问。在

相关问题 更多 >