from django.template.defaultfilters import slugify def find_available_slug(object, instance, slug): """ Recursive method that will add underscores to a slug field until a free value is located """ try: sender_node = object.objects.get(slug=slug) except object.DoesNotExist: instance.slug = slug else: slug = '%s_' % slug find_available_slug(object, instance, slug) return def slug_generator(sender, **kwargs): """ Generates a unique slug for a node """ instance = kwargs['instance'] if instance.slug is not '': return slug = slugify(instance.title) find_available_slug(sender, instance, slug)