我想爲我的模型隨機蛞蝓,但沒有設置「空白=真」(因爲我想與驗證後強制執行。)Django的 - 生成默認蛞蝓
我在想,如果我能做到這樣的事情:
slug = models.SlugField(unique=True, default=some_method(), verbose_name='URL Slug')
其中some_method是一種方法,產生一個隨機slug?我已經嘗試了上面的代碼,它不工作:(
我希望做的是生成一個唯一蛞蝓(unique_slugify?)
我想爲我的模型隨機蛞蝓,但沒有設置「空白=真」(因爲我想與驗證後強制執行。)Django的 - 生成默認蛞蝓
我在想,如果我能做到這樣的事情:
slug = models.SlugField(unique=True, default=some_method(), verbose_name='URL Slug')
其中some_method是一種方法,產生一個隨機slug?我已經嘗試了上面的代碼,它不工作:(
我希望做的是生成一個唯一蛞蝓(unique_slugify?)
您可以覆蓋模型保存法,這樣,當。一個新的實體創建後,動態生成的鼻涕蟲是這樣的:
if not self.pk:
self.slug = ''.join(random.sample(string.ascii_lowercase, 10))
您可能做到這一點,但它不是很好,更好的方式是讓塞是確定性slugified版本的對象名稱。
我不介意如果是這樣的話,我只是混淆了我如何將它設置爲默認值。我不使用管理面板 – Hanpan 2011-02-03 10:04:55
一個隨機字符串不是唯一性的好,更好地堅持像摘要(時間戳與隨機組合) – 2011-02-03 10:06:55
也許模型驗證可以幫助嗎? http://docs.djangoproject.com/en/dev/ref/models/instances/
您可以簡單地驗證應該寫入slug字段的值,如果它已經存在,則生成一些獨特的值。
也可以重寫模型保存方法。
乾杯。
在谷歌搜索,我發現類似的問題:How to use slug in django
我是這麼認爲的更好的辦法是改寫保存方法,並在形式validade領域。
但是,slug應該是唯一的,所以產生隨機字符串並不好!就像Tommaso Bardugi說的那樣,如果你在url中添加時間戳,這個問題就解決了。
當你希望你的slu to被自動生成並且在同一模型中的某個其他字段中產生的entry lies所在的位置時,可以使用它。
from django_extensions.db.fields import AutoSlugField
slug = AutoSlugField(_('slug'), max_length=50, unique=True, populate_from=('name',))
populate_from
是該模型中的字段,其將自動生成蛞蝓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)
這個在創建對象時調用方法,是這個意圖嗎? – jbcurtin 2011-02-03 10:04:01
是的,雖然它不起作用... NameError:名稱'some_method'沒有定義 – Hanpan 2011-02-03 10:10:21