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进行了很好的优化