簡體   English   中英

如何將隨機整數設置為 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)

當我在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM