[英]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)
當我在 admin 中添加內容時,會生成范圍內的整數並將其作為默認值放入 charfield。 從那里,我可以簡單地向 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)
您可以通過將函數作為默認值傳遞來生成隨機字符串。 該函數將運行並使用函數的返回值設置默認值。 引用@Wtower 給出的例子。
def random_string():
return str(random.randint(10000, 99999))
class Content(models.Model):
......
unique_url = models.CharField(default = random_string)
但這有一個警告:當您創建一個字段並遷移現有數據庫時,該函數將只運行一次並使用相同的“隨機”數進行更新。
例如,如果模型中已有 500 個條目。 您將擁有相同的字符串,例如“548945”,對於每個 unique_url 都會殺死整個目的。
您可以通過更改數據庫中現有條目的值來克服此問題。 這是一次性的工作,可以使用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.