2011-02-03 50 views
8

我想爲我的模型隨機蛞蝓,但沒有設置「空白=真」(因爲我想與驗證後強制執行。)Django的 - 生成默認蛞蝓

我在想,如果我能做到這樣的事情:

slug = models.SlugField(unique=True, default=some_method(), verbose_name='URL Slug') 

其中some_method是一種方法,產生一個隨機slug?我已經嘗試了上面的代碼,它不工作:(

我希望做的是生成一個唯一蛞蝓(unique_slugify?)

+0

這個在創建對象時調用方法,是這個意圖嗎? – jbcurtin 2011-02-03 10:04:01

+0

是的,雖然它不起作用... NameError:名稱'some_method'沒有定義 – Hanpan 2011-02-03 10:10:21

回答

8

您可以覆蓋模型保存法,這樣,當。一個新的實體創建後,動態生成的鼻涕蟲是這樣的:

if not self.pk: 
    self.slug = ''.join(random.sample(string.ascii_lowercase, 10)) 

可能做到這一點,但它不是很好,更好的方式是讓塞是確定性slugified版本的對象名稱。

+0

我不介意如果是這樣的話,我只是混淆了我如何將它設置爲默認值。我不使用管理面板 – Hanpan 2011-02-03 10:04:55

+0

一個隨機字符串不是唯一性的好,更好地堅持像摘要(時間戳與隨機組合) – 2011-02-03 10:06:55

0

在谷歌搜索,我發現類似的問題:How to use slug in django

我是這麼認爲的更好的辦法是改寫保存方法,並在形式validade領域。

但是,slug應該是唯一的,所以產生隨機字符串並不好!就像Tommaso Bardugi說的那樣,如果你在url中添加時間戳,這個問題就解決了。

19

當你希望你的slu to被自動生成並且在同一模型中的某個其他字段中產生的entry lies所在的位置時,可以使用它。

from django_extensions.db.fields import AutoSlugField 

slug = AutoSlugField(_('slug'), max_length=50, unique=True, populate_from=('name',)) 
  • populate_from是該模型中的字段,其將自動生成蛞蝓
2

default必須是一個值或一個可調用。
因此它是default=some_method,而不是default=some_method()。這裏是一個例子:

from django.contrib.auth.models import UserManager 

def randomString(): 
    um = UserManager() 
    return(um.make_random_password(length=25)) 

class Foo(models.Model): 
    code = models.CharField(max_length=25, default=randomString)