Search code examples
pythondjangoslug

Slug field does not work for Bengali language in django. How to work with slug in bengali


Django slug field does not work for any other language except English. I want to work with Bengali language here is the code

class Post(models.Model):
    title = models.CharField(max_length=140)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
    content = RichTextField(default="")
    image = models.ImageField(upload_to="media/post")
    url = models.SlugField(unique=True, max_length=250, null=True, blank=True)
    likes = models.IntegerField(default=0)
    created_date = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.title}"

    def save(self, *args, **kwargs):  # new
        if not self.url:
            slug_str = f"{self.title}-{datetime.datetime.now()}"
            self.url = slugify(slug_str)
        return super().save(*args, **kwargs)

Solution

  • Pass allow_unicode=True to your SlugField to accept unicode chars

    class Post(models.Model):
        ...
        url = models.SlugField(allow_unicode=True, unique=True, max_length=250, null=True, blank=True)
    

    Then when you generate the slug you need to pass the same parameter to django.utils.text.slugify

    def save(self, *args, **kwargs):  # new
        if not self.url:
            slug_str = f"{self.title}-{datetime.datetime.now()}"
            self.url = slugify(slug_str, allow_unicode=True)
        return super().save(*args, **kwargs)