Django:保存模型时检测一组字段的更改

Bel*_*dez 6 python django hash django-models

问题

我的模型中有一个需要计算的字段.我想在保存模型时执行这些计算.但是,因为它是资源密集型的,所以我只想在某些字段发生变化时执行这些计算.

最初的想法

将3个字段的哈希值保留为模型中的不同字段.在保存时,散列三个字段,如果等于当前在模型中保存的字段,则继续保存实例而无需进一步的工作.否则,执行计算,保存计算结果并保存新哈希.

我的问题:

  1. 这是最好的选择吗?如果没有,请分享哪些更好,为什么.

  2. 如果没有更好的方法:我应该使用哪种哈希?为什么?

  3. 我应该使用哪种Django模型字段类型来保存哈希?

Bel*_*dez 4

我正在提交我最初想法的实现作为答案以供其他人批评:

模型.py

from hashlib import md5

class Stop(models.Model):
    line = models.CharField(max_length=12)
    street = models.CharField(max_length=32, choices=STREET_CHOICES)
    order = models.PositiveIntegerField(blank=True, null=True)
    location_hash = models.CharField(max_length=32, null=True)

    def save(self):
        location_hash = md5('%s@%s' % (self.line, self.street))
        if self.location_hash != location_hash:
            self.order = calculate_order(line=self.line, street=self.street)
            self.location_hash = location_hash
        super(Stop, self).save()
Run Code Online (Sandbox Code Playgroud)

如果有人有任何建议、意见或疑虑;分享!