Django Tagulous - Fabulous Tags
A tagging library for Django. Built on ForeignKey and ManyToManyField to support tag strings as well as native ORM queries.
Use a SingleTagField as a CharField with dynamic choices, or a TagField for
conventional tagging or nested categorisation.
If you find this project useful, please do consider sponsoring development.
Features
- Easy to install - simple requirements, simple syntax, lots of options
- Based on ForeignKey and ManyToManyField, so it's easy to query
- Autocomplete support built in, if you want it
- Supports multiple independent fields on a single model
- Supports trees of nested tags, for detailed categorisation
- Admin support for managing tags and tagged models
Tested on Django 3.2 to 6.1, on Python 3.10+.
See the Documentation for details of how Tagulous works; in particular:
- Installation - how to install Tagulous
- Example Usage - see examples of Tagulous in use
- Upgrading - how to upgrade Tagulous, and see what has changed in the changelog
- Contributing - for how to contribute to Tagulous
Quickstart
Install with pip install django-tagulous, add django_tagulous to Django's INSTALLED_APPS
and
define the serializers,
then start adding tag fields to your model:
from django.db import models
from django_tagulous.models import SingleTagField, TagField
class Person(models.Model):
name = models.CharField(max_length=255)
title = SingleTagField(initial="Mr, Mrs, Miss, Ms")
skills = TagField()
You can now set and get them using strings, lists or querysets:
myperson = Person.objects.create(name='Bob', title='Mr', skills='run, hop')
# myperson.skills == 'run, hop'
myperson.skills = ['jump', 'kung fu']
myperson.save()
# myperson.skills == 'jump, "kung fu"'
runners = Person.objects.filter(skills='run')
Behind the scenes each tag field is a ForeignKey or ManyToManyField relationship to
a separate model (by default), so more complex queries are simple:
qs = MyRelatedModel.objects.filter(
person__skills__name__in=['run', 'jump'],
)
As well as this you also get autocompletion in public and admin forms, automatic slug generation, unicode support, you can build tag clouds easily, and can nest tags for more complex categorisation.
Metadata
Release files for django-tagulous 2.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_tagulous-2.2.3.tar.gz | 306.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_tagulous-2.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 601.9 kB
Release files / django_tagulous-2.2.3.tar.gz
| Download URL | django_tagulous-2.2.3.tar.gz |
|---|---|
| Size | 306.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59c8262c014b07db12ac05f0c3ae1429375ba42a00dfdf4721efbcd341816534
|
|
BLAKE2b-256 checksum How to use checksums |
ba20df937bfe0645efe8a910cb002747436fd55dc3f0730b5ba84e7d315f0f4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / django_tagulous-2.2.3-py3-none-any.whl
| Download URL | django_tagulous-2.2.3-py3-none-any.whl |
|---|---|
| Size | 295.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fdd66cd0d9003cc35827f2c74ca6729407272a94123ed936123fbf3f441b8966
|
|
BLAKE2b-256 checksum How to use checksums |
d52ce356db3ff053b8966987610be7d5d14256da51677b21942221b0ddd4887c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency log