首页 > 解决方案 > 如何添加存储在模型中的唯一随机生成的 6 位密钥

问题描述

我需要我的数据库中的每个模型都有一个与之关联的唯一六位数密钥。例如,

class Quiz(models.Model):
    name=models.CharField(max_length=250)
    randomly_generated_id=models.RandomField() #how do I generate a random key here?

标签: pythonpython-3.xdjangodatabasedjango-models

解决方案


Just use a models.CharField() and bind the default to a random generator.

import random
import string

def key_generator():
    key = ''.join(random.choice(string.digits) for x in range(6))
    if Quiz.objects.filter(randomly_generate_id=key).exists():
        key = key_generator()
    return key

class Quiz(models.Model):
    name = models.CharField(max_length=250)
    randomly_generated_id = models.CharField(max_length=6, default=key_generator, unique=True, editable=False)

However, unless you have some specific reason to generate a 6 digits key, I would rather recommend to use an universal identifier using models.UUIDField(). This will especially avoid the overhead of checking that the randomly generated key is not already used.

import uuid

class Quiz(models.Model):
    name=models.CharField(max_length=250)
    randomly_generated_id = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)

推荐阅读