================
A number of features are renamed. In all cases, the old names remain available for backwards compatibility, but are deprecated.
* Dropped support for Python 2 (minimum supported version is 3.6)
* Dropped support for Django versions below 2.2
* Renamed ``CommonInfoMixin`` and ``CommonInfoQuerySet`` to ``Auditable`` and ``AuditableQuerySet``, respectively
* Renamed ``ArchivableMixin`` to ``Archivable``
* Renamed ``VersioningMixin`` and ``VersioningQuerySet`` to ``Versionable`` and ``VersionableQuerySet``, respectively
* Renamed ``CommonInfoForm`` to ``AuditableForm``
* Renamed ``DJEM_COMMON_INFO_USER_REQUIRED_ON_SAVE`` setting to ``DJEM_AUDITABLE_USER_REQUIRED_ON_SAVE``
* Added ``UNDEFINED`` constant
* Added ``Loggable`` for instance-based logging
* Added ``OLPMixin`` for custom user models, to support advanced OLP-related functionality
* Added ``MixableQuerySet`` mixin for custom ``QuerySet`` classes
* Added ``DJEM_UNIVERSAL_OLP`` setting
* Added ``DJEM_PERM_LOG_VERBOSITY`` setting
* Added ``AuditableQuerySet`` ``create()``, ``get_or_create()``, and ``update_or_create()`` methods
* Added ``ArchivableQuerySet`` ``archived()`` and ``unarchived()`` methods
* Added ``ajax_login_required()`` decorator
* Added ``UserSavable`` mixin for forms
* Removed default implementations of ``_user_can_change_*()`` and ``_user_can_delete_*()`` on ``Auditable`` - this was far too specific a use-case to be the default
* Removed ``ArchivableQuerySet``'s ``archive()`` and ``unarchive()`` methods
* Removed ``Archivable``'s ``live`` and ``archived`` Managers
* Removed explicit ``Manager`` classes for mixins
* Moved custom ``QuerySet`` classes for mixins into ``djem.models.models``