如何将随机整数设置为 Django CharField 的默认值?

How to set a random integer as the default value for a Django CharField?

我的 models.py 看起来像这样:

import random
random_string = str(random.randint(10000, 99999))

class Content(models.Model):
    ......
    unique_url = models.CharField(default = random_string)

当我在管理中添加内容时,会生成一个范围内的整数并将其作为默认值放入字符字段中。从那里,我可以简单地向 charfield 添加更多单词。但是,我当前设置的问题是每次添加新文章时整数都保持不变。我想生成并插入随机整数,因为我正在使用 unique_url 字段基本上找到我的每个特定对象,并且我期望有很多内容,所以添加随机数通常会确保每个内容都有独一无二的 unique_url.

因此,我正在寻找一个系统,每次使用管理面板添加新内容时都会生成一个随机整数,并将其作为一个字段的默认值。这样的事情在 Django 中甚至可能吗?

这样你就生成了一次随机数。您需要定义一个函数,例如:

def random_string():
    return str(random.randint(10000, 99999))

然后定义您已有的模型,不使用 () 以传递对函数本身的引用,而不是函数返回的值:

class Content(models.Model):
    ......
    unique_url = models.CharField(default = random_string)

您可以通过将函数作为默认值传递来生成随机字符串。该函数将 运行 并使用函数的 return 值设置默认值。引用@Wtower.

给出的例子
def random_string():
    return str(random.randint(10000, 99999))

class Content(models.Model):
    ......
    unique_url = models.CharField(default = random_string)

但这有一个警告:当您创建字段并迁移现有数据库时,该函数将 运行 仅 一次 并使用相同的 'random' 进行更新] 数字。

例如,如果模型中已有 500 个条目。对于每个 unique_url,您将拥有相同的字符串,例如“548945”,这将破坏整个目的。

您可以通过更改数据库中现有条目的值来解决这个问题。这是一次性工作,可以使用 django shell.

完成
python ./manage.py shell
from appname.models import Content, random_string 
# Change appname and file name accordingly

entries = Content.objects.all()
for entry in entries :
    entry.unique_url = random_string()
    entry.save()