2

这个问题可能有点大,我将尝试解释发生的一切。下面是我的标题模型,它通过标题填充 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)

我的标题是外语(具体是尼泊尔语)下面是我的管理面板的图像,用于填充标题类 标题类

如您所见,我的标题是外语的,但是我的 slug 字段是通过将该标题转换为我不想要的英语来自动填充的,我希望我的 slug 字段以与我的标题字段相同的语言填充。我做到了一些搜索和一个名为 unidecode 的模块可能是它的解决方案,我也尝试使用它,但由于它的文档不是很好,我无法理解它。所以如果有任何其他解决方案或如何正确使用 unidecode ?任何帮助或线索将不胜感激

4

1 回答 1

1

问题是,slugification 发生在 JavaScript 中(至少在标准 Django admin 中),在它到达服务器之前(您可以urlify.js在 admin contrib 包中查找)。

SlugField在called上有一个新选项allow_unicode,它可能会做你想做的事,但它是在 Django 1.9 中引入的。

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

另一种选择是完全对管理员隐藏 slug 字段,并执行与您在问题中发布的代码片段类似的操作,但您可能应该在ModelAdmin类而不是模型本身中执行此操作(并且您可能想要使用unidecode在将字符串传递给slugify) 之前。

于 2015-12-16T10:27:08.060 回答