python - 如何为Django模型生成HASH

标签 python django

我正在尝试为我的 10 位 Django 模型生成唯一的 HASH 值我已经尝试了这些方法但是我收到了这个错误

return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: column hash_3 is not unique

这是我尝试过的:

import os
import time
import hashlib
from os import path
from binascii import hexlify
from django.db import models
from django.contrib import admin
from django.core.files.storage import FileSystemStorage
#------------------------------------------------------------------------------ 

def _createHash():
    """This function generate 10 character long hash"""
    hash = hashlib.sha1()
    hash.update(str(time.time()))
    return  hash.hexdigest()[:-10]


class tags(models.Model):
    """ This is the tag model """

    seo_url1 = models.URLField()
    seo_url2 = models.URLField()
    seo_url3 = models.URLField()
    tagDescription = models.TextField()                 # Tag Description
    tag = models.CharField(max_length=200)              # Tag name
    tagSlug = models.CharField(max_length=400)          # Extra info can be added to the existing tag using this field
    updatedAt = models.DateTimeField(auto_now=True)     # Time at which tag is updated
    createdAt = models.DateTimeField(auto_now_add=True) # Time at which tag is created
    hash_1 = models.CharField(max_length=10,default=_createHash(),unique=True)
    hash_2 = models.CharField(max_length=10,default=_createHash(),unique=True)
    hash_3 = models.CharField(max_length=10,default=_createHash(),unique=True)

这个方法我也试过:

def _createHash():
    """This function generate 10 character long hash"""
    return hexlify(os.urandom(5))

我有一个脚本,每次我运行我的脚本时都会将数据插入到这个模型中,我得到上面提到的错误..有没有其他方法可以做到这一点..我想将唯一的哈希值存储到列 hash_1, hash_2,hash_3.

最佳答案

不要在您的字段中调用 _createHash() 函数,而只需将引用传递给模型中的可调用对象,例如

hash_1 = models.CharField(max_length=10,default=_createHash,unique=True)

正如 Lennart Regebro 在他的回答中提到的,您每次尝试启动服务器时都会获得相同的值。

Django docs这么说吧:

Field.default

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

关于python - 如何为Django模型生成HASH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16853815/

相关文章:

python - scikit-learn中SGDClassifier的正则化参数和迭代

python - Selenium - 无法点击隐藏元素

python - 检查目录是否包含具有给定扩展名的文件

python - 如何阻止空格键在 PyQt5 中触发聚焦的 QPushButton?

Django - 在多个数据库之间同步数据

Python lxml 更改标签层次结构?

django - 我将如何在我的 Django 模型中创建一个事件/非事件 bool 字段?

python - Django 使用动态 SMTP 设置发送电子邮件

sql - 使用 sql 数据创建模型

Django:验证上传文件的文件类型