2015-12-16 59 views
1

這個問題可能會有點大,我會盡力解釋perrty很多事情正在發生什麼。下面是我的標題模型,它通過任何標題填充slug字段本身:在django slug字段中使用外語不起作用

class Heading(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length=5000) 
    content =RichTextUploadingField() 
    image= models.ImageField(null=True,blank=True) 
    date = models.DateField(default=datetime.now()) 
    time = models.TimeField(default=datetime.now()) 
    slug = models.SlugField(unique=True, null=True, blank=True) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.title) 
     super(Heading, self).save(*args, **kwargs) 

我的標題是一門外語(尼泊爾文要具體)低於 是我的管理面板的圖像填滿標題類 headingclass

,你可以看到我的標題是外語,但我的slug字段是通過在eng中轉換該標題自動填充的我不希望我的slug字段填充與我的標題字段相同的語言。我做了一些搜索,並且一個名爲unidecode的模塊可能是解決方案,我也嘗試過使用它,但因爲它的文檔不好,我不能得到它的鉤。因此,如果有任何其他解決方案或如何正確使用unidecode?任何形式的幫助或線索將不勝感激

+0

這是slugify功能的文檔字符串:https://github.com/django/django/blob/93452a70e8a62c7408eeded444f5088d4a26212d/django/template/defaultfilters.py#L232-L234 – allcaps

+0

這是實際的代碼:HTTPS:/ /github.com/django/django/blob/93452a70e8a62c7408eeded444f5088d4a26212d/django/utils/text.py#L413-L427。你可以直接從utils.text導入slugify並設置unicode = True。 – allcaps

+0

de管理中的slu is是在執行保存方法時鍵入但被重寫時由javascript計算的。 – allcaps

回答

1

問題是,slugification發生在JavaScript(至少在標準的Django管理員中)在到達服務器之前(您可以在admin contrib包中查找urlify.js)。

SlugField上有一個新選項allow_unicode,它可以做你想做的,但它已經在Django 1.9中引入。

如果你還不能升級到1.9,你可以理論上在你的服務器上設置一些端點,它需要一個字符串,運行unidecode並返回它,然後製作一些自定義JavaScript代碼來覆蓋管理員的默認段落,但聽起來像很多工作。

另一種選擇是從管理員那裏完全隱藏slug字段,並執行與您在問題中發佈的代碼片段類似的內容,除非您應該在ModelAdmin類中代替模型本身(和在將字符串傳遞給slugify之前,您可能希望在那裏使用unidecode)。

相關問題