Reputation: 977
I want to create unique slug.I want to create unique slug. I use some methods to generate unique slug,but I have problem with them.
this is my model and my method to create unique slug:
#Models.py
class MyModel(models.Model):
slug = models.SlugField(null=True, blank=True, unique=True)
def _get_unique_slug(self, slug_input):
slug = slugify(slug_input)
unique_slug = slug
num = 1
while Curriculum.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, num)
num += 1
return unique_slug
def save(self, *args, **kwargs):
if not self.id: # Create
if not self.slug: # slug is blank
self.slug = self._get_unique_slug(slug_input=self.title)
else: # slug is not blank
self.slug = self._get_unique_slug(slug_input=self.slug)
else: # Update
self.slug = self._get_unique_slug(slug_input=self.slug)
super(Curriculum, self).save(*args, **kwargs)
This method have two problem:
1. Every time that I save each object(even without modify it), slug changes and '-1' append to it.
2. For some language such as Arabic and Farsi(Persian) slug didn't create. how can I fix these problems?
Upvotes: 0
Views: 145
Reputation: 398
slug field have allow_unicode:
slug = models.SlugField(null=True, blank=True, unique=True, allow_unicode=True, max_length=255)
prepopulate slug in ModelAdmin:
#admin.py
class EditModel(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
admin.site.register(ModelName, EditModel)
customize slug field data:
from django.utils.text import slugify
# overwrite your model save method || necessary for : django<1.11.12
def save(self, *args, **kwargs):
title = self.title
# allow_unicode=True for support utf-8 languages
self.slug = slugify(title, allow_unicode=True)
super(ModelName, self).save(*args, **kwargs)
Upvotes: 1