def clean_title(self): is_add = self.instance.pk is None # if a blog already exists with a similar title or # with a slug similar to one generated from the title, # raise error to notify the user about the same. self.slug = generate_slug(self.cleaned_data['title']) query = BlogPost.objects.filter( Q(title=self.cleaned_data['title']) | Q(slug=self.slug)) if is_add: # during add. if query.count() > 0: raise forms.ValidationError( _('Blog with a similar title already exists.')) else: # during edit. if query.exclude(pk=self.instance.pk).count() > 0: raise forms.ValidationError( _('Blog with a similar title already exists.')) # make sure title is alphanumeric. try: int(self.cleaned_data['title']) except ValueError as e: pass else: raise forms.ValidationError(_('Invalid value.')) return clean_value(self.cleaned_data['title'], tags=[]) # remove all HTML tags.
def create_post(request, slug): blog = get_object_or_404(Blog, slug=slug) if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): post = form.save(commit=False) slug = generate_slug(post.title) conflicts = Post.objects.filter(slug__startswith=slug) if conflicts: slug = get_unique_slug(slug, conflicts) post.slug = slug post.author = request.user post.blog = blog post.save() # We don't want to start sending garbage requests while testing, # and we only want to do this on the first save of a published post, # not every update, otherwise we might get IP banned. if not settings.DEBUG: post.send_pingbacks() return redirect('view_post', post.created.year, post.get_formatted_month(), post.slug) else: form = PostForm() context = { 'blog': blog, 'post_form': form, } return render_to_response('blog/create_post.html', context, RequestContext(request))
def save(self, **kwargs): """ Override django Model save method to generate a slug from the title during create. """ created = self.pk is None if created and not self.slug: self.slug = generate_slug(self.title) super(BlogPost, self).save(**kwargs)
def create_blog(request): if request.method == 'POST': form = BlogForm(request.POST) if form.is_valid(): blog = form.save(commit=False) slug = generate_slug(blog.title) conflicts = Blog.objects.filter(slug__startswith=slug) if conflicts: slug = get_unique_slug(slug, conflicts) blog.slug = slug blog.owner = request.user blog.save() return redirect('view_blog', blog.slug) else: form = BlogForm() context = { 'blog_form': form, } return render_to_response('blog/create_blog.html', context, RequestContext(request))