django-extended-history
django-extended-history is (IMHO) the simplest way to record all changes made in admin-screens.
Requirements
Django >=4.2
Features
Drop-in extension for Django history (Log entries). No changes in any model, hence no migrations.
Records all changes in JSON format, extending what Django stores by default.
Adds a view ‘Log entries’ under ‘Administration’, showing all content types for which a user has permissions.
Safe to remove. Django will ignore all extra recorded information and revert to it’s default history. So give it a spin!
Installation
pip install django-extended-history
Setup
Add django_extended_history to INSTALLED_APPS setting like this:
INSTALLED_APPS = [
...,
'django_extended_history',
]
Done!
Usage
Apply the DjangoExtendedHistory mixin to all applicable admin-views:
from django.contrib import admin
from .models import MyModel
from django_extended_history.admin import DjangoExtendedHistory
@admin.register(MyModel)
class MyModelAdmin(DjangoExtendedHistory, admin.ModelAdmin):
...
Example Log Entry
Below an example Log Entry where the first name of a user was changed from ‘John’ to ‘Jane’, the email address was changed accordingly and the user was added to a group ‘Expert’ at the same time.
Settings
DJANGO_EXTENDED_HISTORY_LANGUAGE
By default, log entries are written in the language active during the request. Set this to a language code to write all log entries in a fixed language regardless of the user’s locale:
DJANGO_EXTENDED_HISTORY_LANGUAGE = 'en'
This is useful when you want consistent, searchable log entries across a multilingual site.
Misc
Django extended history is released under the BSD-3 license, like Django. If you like it, please consider contributing.
Metadata
Release files for django-extended-history 1.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django_extended_history-1.10.0.tar.gz | 16.0 kB | Without provenance | Details for django_extended_history-1.10.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| django_extended_history-1.10.0-py3-none-any.whl | Python 3 | none | any | Details for django_extended_history-1.10.0-py3-none-any.whl |
Total release size: 32.1 kB
Release files / django_extended_history-1.10.0.tar.gz
| Download URL | django_extended_history-1.10.0.tar.gz |
|---|---|
| Size | 16.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
557c29ad35e6c16208d57e023911a9e8d85568e625a1ada6bf8bca63adf5f1e2
|
|
BLAKE2b-256 checksum How to use checksums |
3c5ca1fafb3b13db5a7717c8edf0bdfe7e58e76cc0b345dc911d54898c2ceb3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / django_extended_history-1.10.0-py3-none-any.whl
| Download URL | django_extended_history-1.10.0-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2533326b82d0dd27917d37da904e315791c524b6e64e1c145f87d5b3ae86c872
|
|
BLAKE2b-256 checksum How to use checksums |
38ef74c6cd0f4d760d3bdbf1b93b34728da14fc6aa91890f697acf87d4050d88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for django-extended-history 1.10.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.