这就是我的模型:
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)
当我创建一个Alert时,我将哈希值设置为某个东西。但是,我读到我可以有效地做到这一点:
hash = models.CharField(max_length=64, unique=True, default=some_hash_function)
def some_hash_function():
...
return some_hash
但是我想要的哈希依赖于raw_line,是否可以将函数hash设置为raw_line并默认设置它?
一些额外的背景:
我尝试过以下操作:
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()
但似乎无法找到hash_raw_line的引用
答案 0 :(得分:1)
您可以通过覆盖save()
模型的Alert
方法来实现此目的:
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
字段。