Skip to main content

A package for adding a django-reversion history endpoint to django-rest-framework ModelViewSet

Project description

django-reversion-rest-framework

A package for adding a django-reversion history endpoint to django-rest-framework ModelViewSet.

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 history action in the detail (/my-model-url/<pk>/history/)

    displaying a list of all revisions of that specific record

  • a GET deleted action in the list (/my-model-url/deleted/)

    displaying a list of all deleted records

  • a POST revert action in the detail (/my-model-url/<pk>/revert/<version_pk>/)

    allowing users to revert to a previous revision of the object

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.

  • HistoryOnlyMixin contains only the history action

  • DeletedOnlyMixin contains only the deleted action

  • ReadOnlyHistoryModel contains history and revert actions

  • RevertMixin contains history, revert and deleted actions

Customizing the VersionSerializer

The HistoryModelViewSet comes up with history and deleted 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_rest_framework.viewsets import HistoryModelViewSet
from reversion.models import Revision, Version
from reversion_rest_framework.serializers import (
    RevisionSerializer,
    VersionSerializer,
)


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
    # ...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-reversion-rest-framework, version 0.4.0
Filename, size File type Python version Upload date Hashes
Filename, size django_reversion_rest_framework-0.4.0-py3-none-any.whl (5.2 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size django-reversion-rest-framework-0.4.0.tar.gz (4.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page