summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/utils.py15
-rw-r--r--news/views.py18
2 files changed, 17 insertions, 16 deletions
diff --git a/main/utils.py b/main/utils.py
index 17ca386..cdd4ff7 100644
--- a/main/utils.py
+++ b/main/utils.py
@@ -9,6 +9,7 @@ import hashlib
from django.core.cache import cache
from django.db import connections, router
from django.utils.timezone import now
+from django.template.defaultfilters import slugify
CACHE_TIMEOUT = 1800
@@ -118,6 +119,20 @@ def set_created_field(sender, **kwargs):
obj.last_modified = time
+def find_unique_slug(model, title):
+ '''Attempt to find a unique slug for this model with given title.'''
+ existing = set(model.objects.values_list(
+ 'slug', flat=True).order_by().distinct())
+
+ suffixed = slug = slugify(title)
+ suffix = 0
+ while suffixed in existing:
+ suffix += 1
+ suffixed = "%s-%d" % (slug, suffix)
+
+ return suffixed
+
+
def database_vendor(model, mode='read'):
if mode == 'read':
database = router.db_for_read(model)
diff --git a/news/views.py b/news/views.py
index 0e22ac3..62d30fd 100644
--- a/news/views.py
+++ b/news/views.py
@@ -3,26 +3,12 @@ import markdown
from django import forms
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect
-from django.template.defaultfilters import slugify
from django.views.decorators.http import require_POST
from django.views.generic import (DetailView, ListView,
CreateView, UpdateView, DeleteView)
from .models import News
-
-
-def find_unique_slug(newsitem):
- '''Attempt to find a unique slug for this news item.'''
- existing = list(News.objects.values_list(
- 'slug', flat=True).order_by().distinct())
-
- suffixed = slug = slugify(newsitem.title)
- suffix = 0
- while suffixed in existing:
- suffix += 1
- suffixed = "%s-%d" % (slug, suffix)
-
- return suffixed
+from main.utils import find_unique_slug
class NewsForm(forms.ModelForm):
@@ -51,7 +37,7 @@ class NewsCreateView(CreateView):
# special logic, we auto-fill the author and slug fields
newsitem = form.save(commit=False)
newsitem.author = self.request.user
- newsitem.slug = find_unique_slug(newsitem)
+ newsitem.slug = find_unique_slug(News, newsitem.title)
newsitem.save()
return super(NewsCreateView, self).form_valid(form)