我的models.py看起来像这样:
import random
random_string = str(random.randint(10000, 99999))
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
当我在admin中添加内容时,会生成范围内的整数并将其作为默认值放入charfield。从那里,我可以简单地在charfield中添加更多单词。但是,我当前设置的问题是每次添加新文章时整数都保持不变。我想生成并插入随机整数,因为我使用unique_url字段基本上找到我的每个特定对象,我期待很多内容,所以添加随机数通常会确保每个内容都有一个kind unique_url。
因此,我正在寻找一个系统,每次使用管理面板添加新内容时都会生成随机整数,并将其作为字段的默认值。在Django中这样的事情是否可能?
答案 0 :(得分:16)
这样您就可以生成一次随机数。您需要定义一个函数,例如:
def random_string():
return str(random.randint(10000, 99999))
然后定义你已经拥有的模型,没有()
,以便传递对函数本身的引用而不是函数返回的值:
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
答案 1 :(得分:1)
您可以通过将函数作为默认值传递来生成随机字符串。该函数将运行并使用函数的返回值设置默认值。引用@Wtower给出的示例。
def random_string():
return str(random.randint(10000, 99999))
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
但这有一个警告:创建字段并迁移现有数据库时,该功能将仅一次运行,并使用相同的“随机”编号进行更新。
例如,如果模型中已经有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()