django-reversion-rest-framework
A package for adding a django-reversion history endpoint to django-rest-framework ModelViewSet.
Requirements
- Python 3.10+
- Django 5.2, 6.0, or 6.1
- django-reversion 4+
- djangorestframework 3+
Django 6.1 requires djangorestframework>=3.18.
Installation
pip install django-reversion-rest-framework
Configuration
Follow the official website for the installation and the integration of django-reversion in your project, otherwise future steps won't work.
You might need to enable the ReversionMiddleware for storing a version for each API change.
Follow the instructions here,
you should add 'reversion.middleware.RevisionMiddleware' to your MIDDLEWARE setting.
Using the HistoryModelViewSet
The HistoryModelViewSet extends django-rest-framework's ModelViewSet adding
-
a GET
historyaction in the detail (/my-model-url/<pk>/history/)displaying a list of all revisions of that specific record
-
a GET
versionaction in the history detail (/my-model-url/<pk>/history/<version_pk>/)displaying a specific revisions of that specific record
-
a GET
deletedaction in the list (/my-model-url/deleted/)displaying a list of all deleted records
-
a POST
revertaction in the detail (/my-model-url/<pk>/revert/<version_pk>/)allowing users to revert to a previous revision of the object
-
a POST
restoreaction in the list (/my-model-url/restore/<version_pk>/)allowing users to restore a deleted object from its version history
You can use the HistoryModelViewSet in place of the ModelViewSet
during viewsets definition.
from reversion_rest_framework.viewsets import HistoryModelViewSet
class MyModelViewSet(HistoryModelViewSet):
# ...
For advanced or selective implementation, you can use reversion_rest_framework.mixins.
-
HistoryMixincontainshistoryandversionactions -
DeletedMixincontains only thedeletedaction -
RestoreMixincontainsdeletedandrestoreactions -
RevertMixincontainshistory,versionandrevertactions
from rest_framework.viewsets import ModelViewSet
from reversion_rest_framework.mixins import HistoryMixin, DeletedMixin
class ReadOnlyHistoryViewSet(HistoryMixin, DeletedMixin, ModelViewSet):
# history + version + deleted, without revert
# ...
Filtering history and deleted
The history and deleted endpoints support filtering by revision fields
via query parameters:
| Parameter | Example |
|---|---|
user |
?user=12 |
date_created |
?date_created=2024-01-01T00:00:00Z |
date_created__gt |
?date_created__gt=2024-01-01T00:00:00Z |
date_created__gte |
?date_created__gte=2024-01-01T00:00:00Z |
date_created__lt |
?date_created__lt=2024-06-01T00:00:00Z |
date_created__lte |
?date_created__lte=2024-06-01T00:00:00Z |
For example: /my-model-url/<pk>/history/?date_created__gt=2024-01-01T00:00:00Z&user=12
Customizing the VersionSerializer
The HistoryModelViewSet comes up with actions using a VersionSerializer.
To customize the serializer with one of your own, you can use version_serializer.
For example, if you want to customize the user serializer inside a revision,
you can use the following code:
from django.contrib.auth.models import User
from rest_framework import serializers
from reversion.models import Revision, Version
from reversion_rest_framework.serializers import (
RevisionSerializer,
VersionSerializer,
)
from reversion_rest_framework.viewsets import HistoryModelViewSet
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username"]
class CustomRevisionSerializer(RevisionSerializer):
user = UserSerializer()
class CustomVersionSerializer(VersionSerializer):
revision = CustomRevisionSerializer()
class MyModelViewSet(HistoryModelViewSet):
version_serializer = CustomVersionSerializer
# ...
Metadata
Release files for django-reversion-rest-framework 4.1.1
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 | |
|---|---|---|---|---|
| django_reversion_rest_framework-4.1.1.tar.gz | 5.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_reversion_rest_framework-4.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.9 kB
Release files / django_reversion_rest_framework-4.1.1.tar.gz
| Download URL | django_reversion_rest_framework-4.1.1.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3a4b1e930cb65e4eb24b4993838d4ae926849fb72fb0a58199090329494e0fd7
|
|
BLAKE2b-256 checksum How to use checksums |
5e64d464dd9ca49fd6902f1cb96711d082bf8901199d1d4cfefba2d19a79a6c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / django_reversion_rest_framework-4.1.1-py3-none-any.whl
| Download URL | django_reversion_rest_framework-4.1.1-py3-none-any.whl |
|---|---|
| Size | 6.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b8251b22698d2544bb4f65f24662329c7df58fcea6a35451e08960b9e382c52
|
|
BLAKE2b-256 checksum How to use checksums |
6f3e4d242f317bda75d4108e2b0e79f8e44e3d4b1aa3ac1c7d204a23f90747e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for django-reversion-rest-framework 4.1.1
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.