- Fixed an issue where object caches would not be properly cleared after updating tags, leading to stale reads in cases where prefetch_related is used.
Backwards incompatible: Tag slugification used to silently strip non-ASCII characters from the tag name to make the slug. This leads to a lot of confusion for anyone using languages with non-latin alphabets, as well as weird performance issues.
Tag slugification will now, by default, maintain unicode characters as-is during slugification. This will lead to less surprises, but might cause issues for you if you are expecting all of your tag slugs to fit within a regex like
[a-zA-Z0-9](for example in URL routing configurations).
Generally speaking, this should not require action on your part as a library user, as existing tag slugs are persisted in the database, and only new tags will receive the enhanced unicode-compatible slug.
If you wish to maintain the old stripping behavior, set the setting
As a reminder, custom tag models can easily customize slugification behavior by overriding the
slugifymethod to your business needs.
`` Drop Django 2.2 support.
- Add Python 3.10 support.
- Add Django 4.0 support.
- Drop Django 3.1 support.
- Backwards incompatible:
TaggableManager.setnow takes a list of tags (instead of varargs) so that its API matches Django’s
- Fix issue where
TagFieldwould incorrectly report that a field has changed on empty values.
- Update Russian translation.
- Add Persian translation
- Fix issue for many languages where content types were not being properly translated.
- Provide translators additional context regarding strings in TagBase model.
- Fix compiled Ukranian translation (which would cause a failure on load for this locale).
- Update compiled Danish translation.
- Vendor in the django-taggit-serializer project (under taggit.serializers).
- Add Arabic translation.
- Add Ukranian translation.
- Add Python 3.9 support.
- Remove Python 3.5 support.
- Add Django 3.2 support.
- Remove Django 1.11 and 3.0 support.
- Add Danish translation.
- Fix crashing that could occur with
similar_objectsin multi-inheritance contexts.
- Add support for custom fields on through table models with through_defaults for
- Model and field
verbose_name_pluralattributes are now lowercase. This simplifies using the name in the middle of a sentence. When used as a header, title, or at the beginning of a sentence, a text transformed can be used to adjust the case.
- Fix prefetch_related when using UUIDTaggedItem.
- Allow for passing in extra constructor parameters when using
TaggableManager.add. This is especially useful when using custom tag models.
- Removed support for end-of-life Django 2.0 and 2.1.
- Added support for Django 3.0.
- Added support for Python 3.8.
- Replaced reference to removed Django’s
- Added Finnish translation.
- Updated Chinese translation.
- Updated Esperanto translation.
form.changed_datato allow early access for a tags defined with
- Backwards incompatible: Remove support for Python 2.
- Added multi-column unique constraint to model
tag. Databases that contain duplicates will need to add a data migration to resolve these duplicates.
TaggableManager.most_common()to always evaluate lazily. Allows placing a
.most_common()query at the top level of a module.
- Fixed setting the
related_nameon a tags manager that exists on a model named
- The project has moved to Jazzband. This is the first release under the new organization. The new repository URL is https://github.com/jazzband/django-taggit.
- Added support for Django 2.2.
- Fixed a race condition in
- Removed method
- Fixed view
ListView.model(was previously set as a
TaggableManagernow always call the parent class
TaggableReland replaced uses with
- Backwards incompatible: Remove support for Django < 1.11
- Added support for Django 2.1 and Python 3.7
- Moved TagWidget value conversion from TagWidget.render() to TagWidget.format_value()
- Added support for Django 2.0
- Backwards incompatible: Dropped support for EOL Python 3.3
- Update spanish translation
- Add testing for Django 1.11 and Python 3.6
- introduce isort and flake8 in the CI
- [docs] Fixed links to external apps
- Improved auto-slug in TagBase to support UUID pk
- [docs] Added contribution guidelines
- Backwards incompatible: Drop support for Django 1.7
- Fix case-insensitive tag creation when setting to a mix of new and existing tags are used
- Check for case-insensitive duplicates when creating new tags
- Support __gt__ and __lt__ ordering on Tags
- Fix list view
- Update Python version classifiers in setup.py
- Add Greek translation
- Document supported versions of Django; fix Travis to test these versions.
- Fix form tests on Django 1.10
- Address list_display and fieldsets in admin docs
- external_apps.txt improvements
- Remove support for Django 1.4-1.6, again.
- Add extra_filters argument to the manager’s most_common method
- Specify app_label for Tag and TaggedItem
- Fix UnboundLocalError in _TaggableManager.set(..)
- Update doc links to reflect RTD domain changes
- Improve Russian translations
- Add app config, add simplified Chinese translation file
- Implementation of m2m_changed signal sending
- Code and tooling improvements
- Added Spanish and Turkish translations
- Add the min_count parameter to managers.most_common function
- Address deprecation warnings
- Add option to override default tag string parsing
- Drop support for Python 2.6
- Silence Django 1.9 warning
- Django 1.9 compatibility fix
- Allows custom Through Model with GenericForeignKey
- Silence Django 1.9 warning about on_delete
- Django 1.9 beta compatibility
- Fix unknown column object_id issue with Django 1.6+
- Database index added on TaggedItem fields content_type & object_id
- Access default manager via class instead of instance
- Prevent IntegrityError with custom TagBase classes
- Fix an admin bug related to the Manager property through_fields
- Fix bug that assumed all primary keys are named ‘id’
- Add option to allow case-insensitive tags
- Fix wrong slugs for non-latin chars. Only works if optional GPL dependency (unidecode) is installed.
- Prevent extra JOIN when prefetching
- Prevent _meta warnings with Django 1.8
- Django 1.8 support
- Specify that the internal type of the TaggitManager is a ManyToManyField
- Fixed 1.7 migrations.
- Final (hopefully) fixes for the upcoming Django 1.7 release.
- Added Japanese translation.
- Backwards incompatible: Support for Django 1.7 migrations. South users
have to set
- Backwards incompatible: Django’s new transaction handling is used on Django 1.6 and newer.
- Backwards incompatible:
Tag.savegot changed to opportunistically try to save the tag and if that fails fall back to selecting existing similar tags and retry – if that fails too an
IntegrityErroris raised by the database, your app will have to handle that.
- Added Italian and Esperanto translations.
- Forbid multiple TaggableManagers via generic foreign keys.
- Fixed support for Django 1.4 and 1.5.
- Added support for prefetch_related on tags fields.
- Fixed support for Django 1.7.
- Made the tagging relations unserializeable again.
- Allow more than one TaggableManager on models (assuming concrete FKs are
- used for the relations).
- Support for Django 1.6 and 1.7.
- Python3 support
- Backwards incompatible: Dropped support for Django < 1.4.5.
- Tag names are unique now, use the provided South migrations to upgrade.
- Added a Hebrew locale.
- Added an index on the
- When displaying tags always join them with commas, never spaces.
- The docs are now available online.
Tagmodels are now allowed.
- Backwards incompatible: Filtering on tags is no longer
filter(tags__in=["foo"]), it is written
- Added a German locale.
- Added a Dutch locale.
taggit.contrib.suggest, it now lives in an external application,
- see External Applications for more information.
- Fixed querying for objects using
- Marked strings as translatable.
- Added a Russian translation.
- Created a mailing list.
- Smarter tagstring parsing for form field; ported from Jonathan Buchanan’s django-tagging. Now supports tags containing commas. See Tags in forms for details.
- Switched to using savepoints around the slug generation for tags. This
ensures that it works fine on databases (such as Postgres) which dirty a
transaction with an
- Added Python 2.4 compatibility.
- Added Django 1.1 compatibility.