from django.template.defaultfilters import slugify
def slugify_unique(value, model, slugfield="slug"):
suffix = 0
potential = base = slugify(value)
while True:
if suffix:
potential = "-".join([base, str(suffix)])
if not model.objects.filter(**{slugfield: potential}).count():
return potential
suffix += 1
"""
above function is not my code, but i don't remember exactly where it comes from
you can find many snippets with such solutions searching for 'unique slug' and so
"""
class ReviewForm(forms.ModelForm):
def save(self, user, commit=True):
self.instance.slug = slugify_unique(self.cleaned_data['title'], self.Meta.model)
review = super(ReviewForm, self).save(commit)
review.save()
return review
class Meta:
model = Review
当然更改适当的名称和表单定义,但你明白了 :)