В библиотеке django-taggit есть возможность настроить формирование slug'ов (уникальных идентификаторов) для тегов без использования символов unicode и кириллицы. Чтобы запретить использование unicode и кириллицы при формировании slug, можно использовать расширенные возможности Django в настройке моделей и поля taggit.
Первым шагом необходимо создать собственный класс для поля тегов в модели, чтобы переопределить метод формирования slug'ов. Для этого нужно создать новый файл с именем "fields.py" в директории вашего приложения Django (из которого вы хотите использовать django-taggit). В этом файле определите новый класс для поля тегов, который будет унаследован от TaggableManager
из django-taggit:
# app_name/fields.py from taggit.managers import TaggableManager class CustomTaggableManager(TaggableManager): def tagify(self, tag_name): # Удалить все нежелательные символы из tag_name tag_name = ''.join(e for e in tag_name if e.isalnum() or e.isspace()) return super().tagify(tag_name)
Вторым шагом необходимо зарегистрировать новый класс поля в файле модели, в котором вы хотите использовать теги. Добавьте следующую строку в начало файла модели:
# models.py import taggit from app_name.fields import CustomTaggableManager taggit.Tag.field = CustomTaggableManager
После этих изменений django-taggit будет использовать ваше собственное поле тегов с переопределенным методом tagify
, который будет удалять все нежелательные символы из тега перед его сохранением в базе данных. В данном случае мы используем метод isalnum
для удаления всех символов, которые не являются буквами или цифрами.
Теперь при добавлении нового тега через django-taggit, все символы unicode и кириллица будут автоматически удалены из тега при формировании его slug'а.
Например, если вы попытаетесь добавить тег "пример" или "example" через django-taggit, то в базу данных будет сохранен только slug "example", без использования unicode и кириллицы.
Таким образом, с помощью настройки моделей и полей django-taggit вы можете легко изменить поведение библиотеки и запретить использование unicode и кириллицы в формировании slug'ов для тегов.