8 Comments

  1. Если заполнять слаг таким образом, то русские буквы транслитерирует нормально, а вот если на английском то не получается. Нашел способ, может кому то пригодится:
    # utils.py

    import unidecode # pip install unidecode

    from django.utils.text import slugify, Truncator

    def slugify(value, truncate_chars):

    '''Truncator и slugify – стандартные утилиты Django. Функция ограничивает текст до заданного количества символов.'''

    return Truncator(slugify(unidecode.unidecode(value))).chars(truncate_chars, truncate='')

    # models.py

    from .utils import slugify

    class Brand(models.Model):

    name = models.CharField(max_length=64)

    slug = models.SlugField(blank=True, max_length=64)

    def save(self, *args, **kwargs):

    self.slug = slugify(self.name, 64)

    super(Brand, self).save(*args, **kwargs)

  2. Не нужно таких костылей, в django есть замечательная функция prepopulated_fields, приведу пример так же к категориями:

    class TitlePrepopulated(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("name",)}

    и регистрируем его с категориями

    admin.site.register(Category, TitlePrepopulated)

  3. столкнулась с более мудрёным способом автоматического образования slug field-a https://pastebin.com/htwVcWts. (correction: exists = qs.exists() if exists: nws_slug =…)
    Принцип тот же: использование сигнала, но + какая-то навороченная рекурсивная функция создания самого слага. Эта функция должна проверить, если ли уже такая сущность с таким слагом, а иначе созвращает новоиспечённый слаг на основе заголовка статьи блога и его айдишника. Опять же непонятно, зачем такая проверка, ведь мы всё проверяем на предмет уникальности слага, перед складированием в базу данных?
    Пример из Udemy.

  4. Танцы с бубном. Автозаполнение в данном случае делается легко через prepopulated_fields = {'slug': ('name',)} в класе файла admin.py

Leave a Reply

Your email address will not be published.


*