Slugify和波斯语的问题

时间:2015-08-15 16:13:16

标签: python django unicode django-models persian

我的模型如下:

class Rule(models.Model):
    business = models.ForeignKey('profiles.Employee', limit_choices_to={'is_employee': True})
    title = models.CharField(max_length=50, blank=False)
    slug = models.SlugField(max_length=50, blank=True, null=True)
    detail = models.TextField(max_length=200)
    frequency = models.CharField(choices=freqs, max_length=10, blank=True, null=True)
    update = models.DateTimeField(auto_now=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{}--{}".format(self.business, self.title)

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        if not self.title == "":
            self.slug = slugify(self.title)
        super(Rule, self).save()

我在slug中保存英文值记录没有任何问题,但是当我想保存波斯语字符串时,我遇到了空白字段,尽管我在ALLOW_UNICODE_SLUGS = True文件中写了settings.py。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

django 1.9版中引入的新选项是SlugField.allow_unicode

如果为True,除ASCII字母外,该字段还接受Unicode字母。默认为False。 doc

例如:

在models.py文件中,定义slug列,如下所示:

slug = models.SlugField(allow_unicode=True)

答案 1 :(得分:1)

有效! 首先,您应该通过Pip安装unidecode:

pip install unidecode

或使用以下链接: https://pypi.python.org/pypi/Unidecode

之后:

def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
    from unidecode import unidecode
    from django.template import defaultfilters
    if not self.title == "":
        self.slug = defaultfilters.slugify(unidecode(self.title))
    super(rule, self).save()

这对波斯语(阿拉伯语)来说不太好,但它有效!