2011-04-19 48 views
3

如果我有一個對象的名稱Object 1,我想get()該對象,但我試圖得到它與slugified名object-1,有沒有辦法做到這一點?例如:Django - Slugify得到查找

Model.objects.get(name__slugify = slugifiedname) 

我想避免在模型中添加額外的slug字段(如果可能的話)。

回答

5

您將需要把一些限制在「名稱」字段的值只允許[-A-ZA-Z] +,但你可以這樣做:

def my_request(request, name): 
    un_slugified_name = name.replace('-', '') 
    objects = MyModel.objects.get(name=unslugified_name) 

但是,通過查詢字符串傳遞的名稱必須與數據庫中的名稱完全相同。因人而異。我的建議是,使用SlugField :)

2

Slugify是一個Python函數。爲了實現您的目標,Django必須獲取完整的數據庫(至少包含pk和name字段),計算每行的段落並將其與給定參數進行比較。而這將是非常imperformant,所以:

TLDR:沒有

+0

同意你的觀點,但如果由塞查找是真的* *爲OP重要的是,它可以添加一個新的數據庫列,以持續跟蹤。不是最佳做法,但可以完成。 – Paolo 2014-09-19 19:48:36