In this article we will have a look at how to use Django utility to create slug field automatically and most importantly, you can create slugs in languages other than English too.
For creating blog application, please refer to post how to create Blog app using Django.
Once you create blog application, you admin screen will look something like below.
Here if you see carefully, slug is user input field, now we want to make it auto created field by making some changes into
from django.db import models from django.contrib.auth.models import User from django.utils.text import slugify # add this class Post(models.Model): title = models.CharField(max_length=200, unique=True) slug = models.SlugField(max_length=200, unique=True,editable=False) # Note the changes here, editable is false. author_local = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts',default="admin") updated_on = models.DateTimeField(auto_now= True) content = models.TextField() created_on = models.DateTimeField(auto_now_add=True) status = models.IntegerField(choices=STATUS, default=0) post_type = models.CharField(max_length=15,choices=POST_CHOICES,default=None,blank=True) category = models.CharField(max_length=50,default=None,blank=True) featured_image = models.ImageField(upload_to='img', blank=True, null=True) class Meta: ordering = ['-created_on'] def save(self, *args, **kwargs): # add this self.slug = slugify(self.title, allow_unicode=True) # add this super().save(*args, **kwargs) # add this def __str__(self): return self.title
Since you are making changes in models.py, you need to run following commands
$python3.6 manage.py makemigrations yourappname $python3.6 manage.py migrate
Now access admin again, it will look like below and once you save the post, slug is automatically created.
Since we are using Unicode, it works for Devanagari script (Marathi and Hindi), I did not test for other languages but it would work for other languages too.
You might be wondering why content text field has options like WordPress editor in my screenshot. Please refer to post How to add Summernote WYSIWYG Editor in Django.