Django,如何将模型中字段的值设置为其中一个字段的散列?

Django,如何将模型中字段的值设置为其中一个字段的散列?,django,Django,这就是我的模型的样子: class Alert(models.Model): hash = models.CharField(max_length=64, unique=True) raw_line = models.TextField() alert_datetime = models.DateTimeField() datetime_dismissed = models.DateTimeField(null=True) 当我创建一个警报时,我将哈希值设置为某

这就是我的模型的样子:

class Alert(models.Model):
    hash = models.CharField(max_length=64, unique=True)
    raw_line = models.TextField()
    alert_datetime = models.DateTimeField()
    datetime_dismissed = models.DateTimeField(null=True)
当我创建一个警报时,我将哈希值设置为某个值。但是,我读到我可以有效地做到这一点:

hash = models.CharField(max_length=64, unique=True, default=some_hash_function)

def some_hash_function():
    ...
    return some_hash
但是我想要的散列依赖于raw_行,是否可以让函数散列raw_行并在默认情况下设置它

其他一些背景:

我试着做了以下几点:

class Alert(models.Model):
    hash = models.CharField(max_length=64, unique=True, default=hash_raw_line)
    raw_line = models.TextField()
    alert_datetime = models.DateTimeField()
    datetime_dismissed = models.DateTimeField(null=True)

    def hash_raw_line(self):
        return hashlib.sha256(self.raw_line).hexdigest()

但它似乎找不到散列原始行的引用

您可以通过覆盖
警报
模型的
save()
方法来实现:

class Alert(models.Model):
hash = models.CharField(max_length=64, unique=True, default=None)
raw_line = models.TextField()
alert_datetime = models.DateTimeField()
datetime_dismissed = models.DateTimeField(null=True)

def save(self, *args, **kwargs):
    if self.hash is None:
        self.hash = hashlib.sha256(self.raw_line).hexdigest()
    super().save(*args, **kwargs)  # Call the "real" save() method.

请注意,
default=None
被添加到
hash
字段中。

它针对最大长度为64的sha256进行了很好的优化