2015-12-16 22 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)。

相关问题