from django.utils.text import slugify

class Post(models.Model):
    header = models.CharField(max_length=50)
    slug = models.SlugField(unique=True, db_index=True)

    def __str__(self):
        return self.header

    def get_absolute_url(self):
        return reverse("post-detail", kwargs={"slug": self.slug})


def unique_slug_generator(instance):
    constant_slug = slugify(instance.header)
    slug = constant_slug
    num = 0
    Klass = instance.__class__
    while Klass.objects.filter(slug=slug).exists():
        num += 1
        slug = "{slug}-{num}".format(slug=constant_slug, num=num)
    return slug

def pre_save_reciever(sender, instance, *args, **kwargs):
    if not instance.slug or instance.header != Post.objects.filter(slug=instance.slug):
        instance.slug = unique_slug_generator(instance)

pre_save.connect(pre_save_reciever, sender=Post)