在django slug领域使用外语是行不通的

时间:2015-12-16 10:00:12

标签: python django django-models slug unidecoder

这个问题可能会有点大,我会尽力解释所有发生的事情。下面是我的标题模型,它填补了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字段是通过用英语转换那个标题而自动填充的,这不是我想要的,我希望我的slug字段用我的标题字段填充相同的语言.i做了一些搜索,一个名为unidecode的模块可能是它的解决方案,我也尝试使用它但是由于它的文档不好我无法得到它。如果有任何其他解决方案或如何使其正确使用unidecode?任何形式的帮助或线索将不胜感激

1 个答案:

答案 0 :(得分:1)

问题是,在它到达服务器之前,JavaScript(至少在标准Django管理员中)发生了混乱(你可以在admin contrib包中查找@SuppressLint("WrongCall") @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { } )。

urlify.js上有一个名为allow_unicode的新选项,它可能会执行您想要的操作,但它已在Django 1.9中引入。

如果你还不能升级到1.9,理论上你可以在你的服务器上设置一个端点,它会接受一个字符串,在其上运行SlugField并返回它,然后编写一些自定义的JavaScript代码,将覆盖管理员中的默认细分,但这听起来像是很多工作。

另一种选择是完全隐藏来自管理员的slug字段,并执行类似于您在问题中发布的代码片段的内容,除非您应该在unidecode类而不是模型中执行此操作本身(您可能希望在将字符串传递给ModelAdmin之前)使用unidecode