Django 5 для начинающих

Прогресс по курсу:  9/1004

11.3 Добавление функциональности тегирования
2 из 2 шагов пройдено

Добавление функциональности тегирования

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

Тег – это просто метка или ключевое слово, которое можно назначать постам. Мы создадим систему тегирования, интегрировав в проект стороннее приложение Django по тегированию.

django-taggit – это приспособленное для использования приложение, которое в первую очередь предлагает модель Tag и менеджер для удобного добавления тегов в любую модель. Мы уже использовали ее у блога на функциях, в разделе 6.6 "Добавление функциональности тегирования".

Для начала установим приложение django-taggit с помощью pip, выполнив команду:

pip install django-taggit


Затем откроем файл настроек settings.py и добавим taggit в настроечный параметр INSTALLED_APPS, как показано ниже:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
    'taggit',
]


После этого откроем файл models.py приложения blog и добавим, предоставляемый приложением django-taggit, менеджер TaggableManager в модель Post:

from taggit.managers import TaggableManager

class Post(models.Model):

    # поля модели и менеджеры

    tags = TaggableManager()

    # мета класс и методы модели

Менеджер tags позволит добавлять, извлекать и удалять теги из объектов Post.


Выполним миграции, чтобы создать необходимые таблицы базы данных для моделей приложения django-taggit и синхронизировать изменения в своей модели:

python manage.py makemigrations
python manage.py migrate


Запустим сервер и проверим любую запись в админ панели:

Мы видим что у наших записей появилось новое поле для ввода тегов через запятую.

В следующем шаге мы добавим представления для вывода записей по тегу.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

В первой версии блога при использовании тегов у меня остался открытый вопрос - как сделать генерацию слагов для тегов с поддержкой транслитерации. Прикрутить собственную slugify() на тот момент не удалось

Сейчас нашел в документации - нужно в settings.py добавить строку

TAGGIT_STRIP_UNICODE_WHEN_SLUGIFYING = True

Если установлен пакет unidecode, то производится автоматическая транслитерация тегов.

Там же описаны некие соображения против, но мне кажется, плюсы их перевешивают

Изменен ilya kutaev

pip install django-taggit==3.0.0

Если у вас проект на Django 5, то ставьте актуальную версию django-taggit,  иначе тэги не будут работать.

pip install django-taggit

@Aleksandr_Gurov, отредактировал, спасибо.