dar*_*rse 8 python django django-models django-admin
我的models.py看起来像这样:
import random
random_string = str(random.randint(10000, 99999))
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
Run Code Online (Sandbox Code Playgroud)
当我在admin中添加内容时,会生成该范围内的整数并将其作为其默认值放入charfield.从那里,我可以简单地在charfield中添加更多单词.但是,我当前设置的问题是每次添加新文章时整数都保持不变.我想生成并插入随机整数,因为我使用unique_url字段基本上找到我的每个特定对象,我期待很多内容,所以添加随机数通常会确保每个内容都有一个kind unique_url.
因此,我正在寻找一个系统,每次使用管理面板添加新内容时生成随机整数,并将其作为字段的默认值.在Django中这样的事情是否可能?
Wto*_*wer 18
这样您就可以生成一次随机数.您需要定义一个函数,例如:
def random_string():
return str(random.randint(10000, 99999))
Run Code Online (Sandbox Code Playgroud)
然后定义你已经拥有的模型,而不是()为了传递对函数本身的引用而不是函数返回的值:
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
Run Code Online (Sandbox Code Playgroud)
您可以通过传递函数作为默认值来生成随机字符串。该函数将运行并使用函数的返回值设置默认值。引用@Wtower 给出的例子。
def random_string():
return str(random.randint(10000, 99999))
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
Run Code Online (Sandbox Code Playgroud)
但这有一个警告:当您创建字段并迁移现有数据库时,该函数将仅运行一次并使用相同的“随机”数字进行更新。
例如,如果模型中已有 500 个条目。对于每个 unique_url ,您将拥有相同的字符串,例如“548945”,这将破坏整个目的。
您可以通过更改数据库中现有条目的值来克服这个问题。这是一次性工作,可以使用django shell.
python ./manage.py shell
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4308 次 |
| 最近记录: |