Django:hashlib一直生成相同的十六进制摘要

时间:2018-01-14 15:16:13

标签: python django

我有一个这样的模型:

class Book(models.Model):
    hash = models.CharField(max_length=56, unique=True, null=True, editable=False)
    created_at = models.DateTimeField('Created at', auto_now_add=True)
    # .. and other fields

    def save(self):
        if self.hash is None:
            string_seed = str(self.created_at).encode('utf-8') + str(self.pk).encode('utf-8')
            self.hash = hashlib.sha224(string_seed).hexdigest()
        super(Book, self).save()

但是在输入第二个数据(在本例中是书)后,我一直收到此错误"Duplicate entry 'c19c...abb5' for key 'store_book_hash_4517c5ea_uniq'"。我不知道为什么我的代码会产生相同的价值。

我使用django管理页面进行数据输入,我想通过"添加书籍#34;在django admin中的表单,self.hash应始终为None,因此新生成的新随机值(但在我的情况下,它不会反而导致完整性错误)。我很困惑

1 个答案:

答案 0 :(得分:0)

Omg,我真的没有注意到>> a = [1,2,3,4,1,2,1] >> del a[a.index(min(a))] >> a [2, 3, 4, 1, 2, 1] 将始终包含string_seed,因此值始终是相同的。我选择的解决方法是使用'NoneNone'

datetime

或先致电string_seed = str(datetime.datetime.now()).encode('utf-8')