How to Save Slug Automatic in Django?

Viewed 1114

Here is my code for saving slug automatically. But it doesn't work and I don't know why! I can't be totally wrong. Help me to get out.

from django.db import models
from django.urls import reverse
from django.template.defaultfilters import slugify



class Article(models.Model):
    title = models.CharField(max_length=50)
    body = models.TextField()
    slug = models.SlugField(null=False,unique=True)


    def __str__(self):
        return self.title


    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})


    def save(self, *args, **kwargs):  # new
        if not self.slug:
            self.slug = slugify(self.title)
        return super().save(*args, **kwargs)

But in django Admin panel I have to save slug manually But I want to save it automatically.

Help me to understand this. Thanks Good People.

2 Answers

exclude the slug field from Django Admin by creating a ModelAdmin class as below,

# admin.py

class ArticleAdmin(admin.ModelAdmin):
    exclude = ('slug',)


admin.site.register(Article, ArticleAdmin)

So, set null=True and add blank=True.

slug = models.SlugField(null=True, blank=True, unique=True)
Related