Проблема с неконтролируемой модификацией каждый раз, когда данные сохраняются в django slug - PullRequest
0 голосов
/ 31 мая 2019

Я хочу создать уникальный слаг. Я хочу создать уникальный слаг.Я использую некоторые методы для генерации уникальных слагов, но у меня есть проблемы с ними.

это моя модель и мой метод создания уникального слага:

#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)

Этот метод имеет две задачи :

1.Каждый раз, когда я сохраняю каждый объект (даже не изменяя его) , слизняк изменяется и к нему добавляется '-1'.

2.Для некоторых языков, таких как арабский и фарси (персидский), слизняк не создавался. как я могу решить эти проблемы?

1 Ответ

1 голос
/ 31 мая 2019

поле слагов имеет allow_unicode:

slug = models.SlugField(null=True, blank=True, unique=True, allow_unicode=True, max_length=255)

предварительно заполнить слаг в ModelAdmin:

    #admin.py 
    class EditModel(admin.ModelAdmin):
              prepopulated_fields = {'slug': ('title',)}
    admin.site.register(ModelName, EditModel)

настроить данные поля слагов:

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)
...