taggit - теги

# settings.py

INSTALLED_APPS = (
    ...
    'taggit',
)
# models.py

from taggit.managers import TaggableManager

class SomeModel(models.Model):

    tags = TaggableManager()
# forms.py

from taggit.forms import TagField

class SomeForm(forms.ModelForm):

    class Meta:
        model = SomeModel

    tags = TagField(label="tags")
# views.py

SomeModel.objects.filter(tags__name='python')
SomeModel.objects.filter(tags__name__in=('python', 'django')).distinct()

TaggableManager

class taggit.managers.TaggableManager(blank, verbose_name, help_text)

Менеджер, реализующий возможность работы с тегами.

add(*tag_names)

Добавляет теги

record.tags.add("python")
record.save()
all()

Возвращает все теги

post.tags.all()
# [<Tag: jazz>, ...]
clear()

Удаляет все теги

record.tags.clear()
record.save()
remove(*tag_names)

Удаляет теги

record.tags.remove("python", "django")
record.save()
set(*tag_names)

Удаляет все теги и записывает новые

record.tags.set("python")
record.save()

TagField

class taggit.forms.TagField(label)

Поле для формы

  • если введенная строка не содержит запятых, двойных кавычек, то каждое слово это отдельный тег
  • строки в двойных кавчках, считаются отдельными тегами
  • строки, разделенные запятыми считаются отдельными тегами

TagWidget

class taggit.forms.TagWidget

HTML виджет