Peter Sanchez avatar Peter Sanchez committed c8edf27

Added slugify_uniquely to djtools/helpers.py

Comments (0)

Files changed (1)

webutils/djtools/helpers.py

 from django.conf import settings
+from django.template.defaultfilters import slugify
 from webutils.helpers import grab_from_import
 
+
 def import_setting_name(setting_name, default_obj=None):
     ''' Used to import an item from a value in the current 
         Django projects settings.py
         except ImportError, err:
             if default_obj is None:
                 raise ImportError(str(err))
-    return default_obj
+    return default_obj
+
+
+def slugify_uniquely(s, queryset=None, field='slug'):
+    '''
+    --> Taken from django-crm models.py
+
+    Returns a slug based on 's' that is unique for all instances of the given
+    field in the given queryset.
+    
+    If no string is given or the given string contains no slugify-able
+    characters, default to the given field name + N where N is the number of
+    default slugs already in the database.
+    '''
+    new_slug = new_slug_base = slugify(s)
+    if queryset:
+        queryset = queryset.filter(**{'%s__startswith' % field: new_slug_base})
+        similar_slugs = [value[0] for value in queryset.values_list(field)]
+        i = 1
+        while new_slug in similar_slugs:
+            new_slug = "%s%d" % (new_slug_base, i)
+            i += 1
+    return new_slug
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.