Django中的持久计算字段

时间:2016-08-12 00:55:37

标签: python django

在MS SQL Server中,有一项功能可用于创建计算列:在检索时即时计算的表列。这个或多或少的映射使用Django模型上的方法来检索计算值(常见示例是检索全名,基于存储的Forename / Surname字段)。

对于昂贵的操作,SQL Server提供Persisted选项。这将使用计算结果填充表列,并在更新表时更新这些结果 - 当计算速度不快但与访问相比不会经常更改时,这是一个非常有用的功能。

但是,在Django中,我找不到复制此功能的方法。我错过了一些明显的东西吗我最好的猜测是某种自定义字段,它将函数作为参数,但我看不到预先存在的那些。还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

一种方法就是使用在保存对象时计算的常规模型字段,例如:

class MyModel(models.Model):
    first_name = models.CharField(max_length=255)
    surname = models.CharField(max_length=255)

    # This is your 'persisted' field
    full_name = models.CharField(max_length=255, blank=True)

    def save(self, *args, **kwargs):
        # set the full name whenever the object is saved
        self.full_name = '{} {}'.format(self.first_name, self.surname)
        super(MyModel, self).save(*args, **kwargs)

您可以在管理员中创建此特殊字段read-only,并在任何模型表单中同样exclude it