Формирование slug в Django

Для формирования slug нам необходимо добавить метод сохранения в нашу модель Article. А также установить необходимый пакет для обработки кириллицы, чтобы ее переделать в латиницу. Давайте это сделаем.

В терминале:

pip install pytils

Подключать никуда не надо.

Добавляем метод в нашу модель Article:

modules/blog/models/articles.py

from pytils.translit import slugify

class Article(models.Model):
    title = models.CharField(verbose_name='Заголовок', max_length=255)
    slug = models.SlugField(verbose_name='URL', max_length=255, blank=True)
    #fields...
    
    #methods...
    
    def save(self, *args, **kwargs):
        """
        Сохранение полей модели при их отсутствии заполнения
        """
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

Пояснения:

  • Теперь при сохранении статьи мы автоматически формируем нормальный человекоподобный URL адрес.
  • Используем slugify из pytils для обработки кириллицы.

Давайте и с админкой разберемся!

Вместо этого:

modules/blog/admin.py

admin.site.register(Article)

Сделаем следующее:

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author')
    list_display_links = ('title', 'slug')
    prepopulated_fields = {'slug': ('title',)}

Пояснения:

  • Я добавил prepopulated_fields, он работает в админке с помощью JS, т.е при вводе заголовка мы сразу получаем нужный нам slug, но если мы просто сотрем полученный slug, сохранясь - мы все равно его сформируем с помощью метода save в самой модели Article.

Вот что вышло:

Следующий, десятый урок будет о создании функции переименования изображения при загрузке.

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)