Automatic slug generation signal

A pre_save signal that will automatically generate a slug for your model based on the "title" attribute, and will store the new slug in the "slug" attribute.

USAGE:
from django.db.models.signals import pre_save

from YOURPACKAGE import slug_generator

pre_save.connect(slug_generator, sender=YOURMODEL)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

fromdjango.template.defaultfiltersimportslugifydeffind_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)exceptobject.DoesNotExist:instance.slug=slugelse:slug='%s_'%slugfind_available_slug(object,instance,slug)returndefslug_generator(sender,**kwargs):""" Generates a unique slug for a node """instance=kwargs['instance']ifinstance.slugisnot'':returnslug=slugify(instance.title)find_available_slug(sender,instance,slug)