社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

在django中如何生成6位字符串作为主键

Hemant Prajapat • 6 年前 • 2235 次点击  

大家好,我创建一个电子商务网站,我想创建一个独特的参考代码为所有用户的,所以我可以添加一个参考代码列作为一个 primery key 在django中,我想创建一个类似于6位strinf的引用代码 SHIKDC .

请告诉我如何创建一个6位的字符串列作为一个 primary_key 在Django。

我知道如何创建一个6位随机字符串,但我想为所有用户创建一个唯一的6位随机密钥,所以请告诉我如何添加此引用代码列。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43999
文章 [ 2 ]  |  最新文章 6 年前
Ishwar Jangid
Reply   •   1 楼
Ishwar Jangid    7 年前

在你的模型中使用信号。对于创建的每个实例,都可以这样做。

def pre_save_create_order_id(sender, instance, *args, **kwargs):
    if not instance.order_id:
        instance.order_id = unique_order_id_generator(instance)


pre_save.connect(pre_save_create_order_id, sender=Order)



def random_string_generator(size = 10, chars = string.ascii_lowercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))



def unique_order_id_generator(instance):
    new_id = random_string_generator()
    k = instance.__class__
    q = k.objects.filter(order_id = new_id).exists()
    if q:
        return unique_order_id_generator(instance)
    return new_id
Shakil
Reply   •   2 楼
Shakil    7 年前

可能的方法之一是 UUIDField link 但是如果你使用这个的默认版本。它将是32位唯一的uuid号。

另一种可能的覆盖方式 save 方法和使用django的helper函数 get_random_string link 生成6位唯一字符串。我必须提到这种类型的uuid的冲突是(52位字母^6),你必须意识到这一点。

from django.utils.crypto import get_random_string

class MyCustomModel(models.Model):
    custom_primary_key = models.CharField(max_length=6, primary_key=True, editable=False, unique=True)

     def save(self, *args, **kwargs):
        if not self.custom_primary_key:
            self.custom_primary_key = get_random_string(6)
        return super(MyCustomModel, self).save(*args, **kwargs)