python - Django 唯一随机作为默认值

标签 python django

在将某个值指定为默认值时,有什么方法可以检查该值是否存在于模型中?如果分配值存在(它不是唯一的),则生成另一个值。 (阅读评论):

def unique_rand():
    return ... # Generate a random string with 8 characters length
               # It shouldn't exists among other persons
               # If exists then generate another random string


class Person(models.Model):
    code = models.CharField(max_length=8, unique=True, default=unique_rand())

也许解决方法不能在 unique_rand 中,而是在 Person 类中的某个地方。 我不想覆盖 save 方法,因为在 save 之前我需要 code。另外,我不想使用 uuid randoms。

最佳答案

只需测试循环中生成的代码是否存在。

from django.contrib.auth.models import User

def unique_rand():
    while True:
        code = password = User.objects.make_random_password(length=8)
        if not Person.objects.filter(code=code).exists():
            return code

class Person(models.Model):
    code = models.CharField(max_length=8, unique=True, default=unique_rand)

请注意,default=unique_rand 参数中没有圆括号。

如果您想限制尝试次数,请将循环从 while 更改为 for:

def unique_rand():
    for _ in range(5):
        ...
    raise ValueError('Too many attempts to generate the code')

关于python - Django 唯一随机作为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419477/

相关文章:

python - pip install MySQL-python 返回找不到vcvarsall.bat

python - Django:实现嵌套的、可重用的组件设计

python - 如何从 svgpathtools 贝塞尔曲线获取坐标列表?

python - 如何在python中从url获取文件?

python - Django 找不到项目应用程序 - 无法导入 x_app

javascript - 如何在 Django 应用程序中加载更多内容?

Python/Matplotlib : Randomly select "sample" scatter points for different marker

python - 期望参数时的错误处理

django - 可以使用 Django 构建 HTML5 移动应用程序吗?

python - 我们可以将数组/列表传递给 django 中的模板内容 block 吗? Python