Формирование 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.
Вот что вышло:

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