在MS SQL Server中,有一项功能可用于创建计算列:在检索时即时计算的表列。这个或多或少的映射使用Django模型上的方法来检索计算值(常见示例是检索全名,基于存储的Forename / Surname字段)。
对于昂贵的操作,SQL Server提供Persisted
选项。这将使用计算结果填充表列,并在更新表时更新这些结果 - 当计算速度不快但与访问相比不会经常更改时,这是一个非常有用的功能。
但是,在Django中,我找不到复制此功能的方法。我错过了一些明显的东西吗我最好的猜测是某种自定义字段,它将函数作为参数,但我看不到预先存在的那些。还有更好的方法吗?
答案 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。