python - 如何添加存储在模型中的唯一随机生成的 6 位密钥
问题描述
我需要我的数据库中的每个模型都有一个与之关联的唯一六位数密钥。例如,
class Quiz(models.Model):
name=models.CharField(max_length=250)
randomly_generated_id=models.RandomField() #how do I generate a random key here?
解决方案
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)
推荐阅读
- node.js - 如何跟踪用户是否已经看过帖子?
- flutter - 在 SearchDelegate 中覆盖 appBarTheme
- hover - 边框样式在顺风悬停时不起作用
- reactjs - 道具最初正确,然后第二次渲染导致它们消失
- oracle - to_date 返回错误的年份
- jsf - 包含另一个 panelgroup 最佳实践的 PanelGroup
- jquery - jquery history js无法读取未定义的属性'msie'
- ionic-framework - 在 ionic IOS 应用程序中看不到有效负载数据?
- spring - @Validated @Size LongArray 控制器与 kotlin
- python - 找出相似物体的两张不同图片之间的差异