django-reversion is an extension to the Django web framework that provides version control for model instances.

Overview

django-reversion

PyPI latest PyPI Version PyPI License TravisCI Docs

django-reversion is an extension to the Django web framework that provides version control for model instances.

Requirements

  • Python 3.6 or later
  • Django 2.0 or later

Features

  • Roll back to any point in a model instance's history.
  • Recover deleted model instances.
  • Simple admin integration.

Documentation

Check out the latest django-reversion documentation at Getting Started

Issue tracking and source code can be found at the main project website.

You can keep up to date with the latest announcements by joining the django-reversion discussion group.

Upgrading

Please check the Changelog before upgrading your installation of django-reversion.

Contributing

Bug reports, bug fixes, and new features are always welcome. Please raise issues on the django-reversion project site, and submit pull requests for any new code.

  1. Fork the repository on GitHub.
  2. Make a branch off of master and commit your changes to it.
  3. Install requirements.
$ pip install django psycopg2 mysqlclient -e .
  1. Run the tests
$ tests/manage.py test tests
  1. Create a Pull Request with your contribution

Contributors

The django-reversion project was developed by Dave Hall and contributed to by many other people.

Comments
  • Can't use proxy models with django-reversion

    Can't use proxy models with django-reversion

    Hello!

    Currently exception is thrown when one tries to register a proxy model. Advice is to register a parent class.

    But django emits post_save signal with a proxy model class as a sender (not a parent class) so _post_save_receiver is omitted and thus a version/revision is lost.

    Why exactly we may want to restrict proxy-model registration?

    It works for me if I register both parent and proxy-child (assuming that I've commented out raise RegistrationError(..)).

    bug 
    opened by freevoid 47
  • squashed migration broke django-reversion upgrade.

    squashed migration broke django-reversion upgrade.

    Issue: Django version: 1.9.7 django-reversion version: 2.0.5 I was using django-reversion 1.8.0, and there is no "db" columns in reversion_version table. Now I am upgrading to version 2.0.5, it adds the column "db" in migration 3, but since there is also a squashed migration file there, when I run python manage.py migrate --fake-initial, it will fake the squashed migration and ignore all the other migrations in the folder, and the migration 2,3,4 will never be ran, so "db" column will not be added to the existing reversion_version table.

    Suggested solution: Remove squashed migration.

    Thanks.

    worksforme needsmoreinfo 
    opened by xuchen81 30
  • Problem with proxy models and inlines

    Problem with proxy models and inlines

    Use case: model and a sub model, both are proxies, created and edited via admin using inline, Problem: The history view show only changes done to the parent model. in other terms: Recorded changes for proxy models within inlines are not visible on the history view

    During investigation, i noticed in the version table, changes recorded foreignkey content_type to concrete model. (changes in parent proxy are recorded pointing to concrete model, same with the child model) while in django_admin_log -as example- , changes (in parent or child) are recorded pointing to the parent proxy model, which makes it easier to retrieve.

    How can i go about solving the Problem? any hints where to start ?

    bug 
    opened by RamezIssac 29
  • Getting NoReverseMatch with 1.9.3 on django-grappelli and django-suit

    Getting NoReverseMatch with 1.9.3 on django-grappelli and django-suit

    Hi,

    I'm trying 1.9.3 and I get this exception when trying to revert a document:

    NoReverseMatch: Reverse for 'app_list' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'admin/(?P<app_label>hardware|profiles|layers|participation|mailing|net|default|nodes|links|cms|auth|connectors|notifications|metrics)/$']
    

    It seems that the template gets a call like reverse('admin:app_list', args=[], kwargs={}, current_app=None) and this causes the exception.

    I do not understand if there is something I have to change in my app in order to upgrade to 1.9.3 or if it might be a bug in django-reversion.

    What do you think?

    Best regards Federico

    blocked 
    opened by nemesisdesign 26
  • revision with json serialized_data fails upon DateField

    revision with json serialized_data fails upon DateField

    Hi!

    my reversioned model contains a DateField called "date". Django-reversion used to, and still does, work fine with that model if the serialized_data is xml. With json serialized_data it fails: see exception added below, reproduced in manage.py shell.

    I narrowed down the problem to wrong json data: django-reverison produces a revision whith json serialized_data which contains "date": "2011-05-05 00:00:00". So if i change that to "date": "2011-05-05" everything's back to normal.

    /path/to/latest/reversion/models.pyc in get_object_version(self)
        187         if isinstance(data, unicode):
        188             data = data.encode("utf8")
    --> 189         return list(serializers.deserialize(self.format, data))[0]
        190 
        191     object_version = property(get_object_version,
    
    /usr/lib/pymodules/python2.7/django/core/serializers/json.pyc in Deserializer(stream_or_string, **options)
         33     else:
         34         stream = stream_or_string
    ---> 35     for obj in PythonDeserializer(simplejson.load(stream), **options):
         36         yield obj
         37 
    
    /usr/lib/pymodules/python2.7/django/core/serializers/python.pyc in Deserializer(object_list, **options)
        126             # Handle all other fields
        127             else:
    --> 128                 data[field.name] = field.to_python(field_value)
        129 
        130         yield base.DeserializedObject(Model(**data), m2m_data)
    
    /usr/lib/pymodules/python2.7/django/db/models/fields/__init__.pyc in to_python(self, value)
        609 
        610         if not ansi_date_re.search(value):
    --> 611             raise exceptions.ValidationError(self.error_messages['invalid'])
        612         # Now that we have the date string in YYYY-MM-DD format, check to make
    
        613         # sure it's a valid date.
    
    
    ValidationError: [u'Enter a valid date in YYYY-MM-DD format.']
    
    worksforme 
    opened by flreinhard 25
  • Django-reversion tests are failing . Django1.3.1, python2.7

    Django-reversion tests are failing . Django1.3.1, python2.7

    ERROR: testRecoverDeleted (reversion.tests.FollowModelsTest)

    Traceback (most recent call last): File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/tests.py", line 466, in testRecoverDeleted reversion.get_deleted(ReversionTestModel1)[0].revision.revert() File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/models.py", line 90, in revert do_revert([version for version in version_set if version.type != VERSION_DELETE]) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/models.py", line 83, in do_revert version.revert() File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/models.py", line 286, in revert self.object_version.save() File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/core/serializers/base.py", line 165, in save models.Model.save_base(self.object, using=using, raw=True) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/db/models/base.py", line 570, in save_base created=(not record_exists), raw=raw, using=using) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 172, in send response = receiver(signal=self, sender=sender, **named) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/revisions.py", line 566, in _post_save_receiver version_data = adapter.get_version_data(instance, VERSION_ADD) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/revisions.py", line 106, in get_version_data "serialized_data": self.get_serialized_data(obj), File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/reversion/revisions.py", line 90, in get_serialized_data fields = self.get_fields_to_serialize(), File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/core/serializers/init.py", line 91, in serialize s.serialize(queryset, **options) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/core/serializers/base.py", line 48, in serialize self.handle_fk_field(obj, field) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/core/serializers/python.py", line 48, in handle_fk_field related = getattr(obj, field.name) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/db/models/fields/related.py", line 315, in get rel_obj = QuerySet(self.field.rel.to).using(db).get(**params) File "/Users/djangodeveloper/virtual_environments/ngc/lib/python2.7/site-packages/django/db/models/query.py", line 349, in get % self.model._meta.object_name) DoesNotExist: ReversionTestModel1 matching query does not exist.

    worksforme 
    opened by jakkana 23
  • ProtectedError

    ProtectedError

    Hi,

    I have a model (my_model) with foreignkeys with "on_delete" set to "models.PROTECT". my_link = models.ForeignKey(my_other_model, on_delete=models.PROTECT, null=True, blank=True) If I create a my_model and dont set my_link, then reversion works fine. But if I set my_link to actually link to an instance of my_other_model then I get the following error when I try to look at a reversion history instance in the admin view. E.g going to: http://127.0.0.1:8000/admin/my_app/my_model/1/history/1/ gives: Internal Server Error: /admin/my_app/organism/1/history/1/ Traceback (most recent call last): File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/utils/decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/contrib/admin/sites.py", line 231, in inner return view(request, *args, **kwargs) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/reversion/admin.py", line 214, in revision_view return self._reversion_revisionform_view( File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/reversion/admin.py", line 164, in _reversion_revisionform_view version.revision.revert(delete=True) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/reversion/models.py", line 101, in revert collector.collect(list(group)) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/db/models/deletion.py", line 245, in collect field.remote_field.on_delete(self, field, sub_objs, self.using) File "/home/my_user/.pyenv/versions/3.8.0/envs/ve38/lib/python3.8/site-packages/django/db/models/deletion.py", line 23, in PROTECT raise ProtectedError( django.db.models.deletion.ProtectedError: ("Cannot delete some instances of model 'my_other_model' because they are referenced through a protected foreign key: 'my_model.mylink'", <QuerySet [<my_model: my_model_string>]>) "GET /admin/my_app/organism/1/history/1/ HTTP/1.1" 500 121554

    It would appear the offending part is when reversion tries to : "# Delete objects that are no longer in the current revision."

    opened by cfblaeb 22
  • accessing many-to-many queryset of a version...

    accessing many-to-many queryset of a version...

    One questions, how can i access a many-to-many field queryset of a version?

    This doesn't work, because it's not the data from the version, it's the current obj data:

    obj = version.object_version.object
    related = getattr(obj, field.name)
    queryset = related.all()
    

    the same with this:

    concrete_model = obj._meta.concrete_model
    many_to_many_fields = concrete_model._meta.many_to_many
    for field in many_to_many_fields:
        queryset = field.value_from_object(obj)
    

    One way i get the right data is this:

    obj = version.object_version.object
    related = getattr(obj, field.name)
    ids = version.field_dict[field.name]
    queryset = many_related_manager.filter(pk__in=ids)
    

    Is this a best practise solution?

    EDIT: Find out that the last example doesn't work, too: many_related_manager.all() will not return all existing values...

    It's for: https://github.com/jedie/django-reversion-compare/commit/90b9c486aac170596568286bb5d37f73aefa09f1#L0R70

    EDIT2: Some info of the objects in the example: version: instance of reversion.models.Version field: instance of django.db.models.fields.related.ManyToManyField and comes from: obj._meta.concrete_model._meta.many_to_many many_related_manager: instance of django.db.models.fields.related.ManyRelatedManager

    opened by jedie 22
  • Add new version to already created revision

    Add new version to already created revision

    I have created a "backup" functionality using the Django Reversion library for an object that keeps revision of a registered model, including the related objects (foreign keys etc.).

    Let's use the following case as an example.

    class Newspaper:
       title = models.CharField()
    
    class Article:
       newspaper = models.ForeignKey('Newspaper') 
    

    When the user clicks to keep a backup of a newspaper object, a revision of the newspaper is created along with the already created articles, under the same revision. I did it so that when the user chooses to revert back to the latest backup, all related objects under the same revision to be reverted.

    The problem starts when a new article of the newspaper is created after the revision is created. The issue is that if the user chooses to revert to the previous revision (the one before creating the new article), the new article will still be there because it was not registered in the latest revision.

    Furthermore, I don't want to create a new revision every time a new article is created because then there might be other changes included that the user will not want to include to the revision.

    What I think might be a suitable solution, is when a new article is created, to create a Version of the article and register it in the latest created revision of the newspaper, but I don't know if it's possible using the functions provided by the API (maybe using add_to_revision?)

    opened by kplatis 21
  • generic diff view

    generic diff view

    django-reversion needs IMHO a easy way to add a diff view. We only have this few helper methods, but no prepared way to add them to the Admin, see: https://github.com/etianen/django-reversion/wiki/Generating-Diffs

    I started a new branch to add a simple diff view to VersionAdmin(), here: https://github.com/jedie/django-reversion/compare/diff

    I made some screenshots (from 03.05.2012): http://www.pylucid.org/de/about/screenshorts/django-reversion/

    The idea is to only add a generic diff and a developer can simply overwrite the method VersionAdmin.make_diff() to make a more meaningful diff.

    The current make_diff() implementation makes a difflib.ndiff() over a "pretty-print" representation of the model data. IMHO this is the only reasonable thing to do in a generic way, isn't it?

    Maybe we can remove make_diff() from the VersionAdmin class and insert the links to the diff view only, if the inherited Admin class implement a make_diff() method?

    opened by jedie 20
  • Model instances without primary key value are unhashable in admin panel

    Model instances without primary key value are unhashable in admin panel

    I have implemented a "backup" functionality when a user wants to keep a revision of his object along with all the related ones. I have implemented the admin integration and registered all the "follows" correctly. When the user presses the "create new backup" button, then the following code is executed:

        with reversion.create_revision():
            main_object.save()
    
            reversion.set_user(request.user)
            reversion.set_comment(comment)
    

    and a revision is created for the object and all the related ones.

    The problem appears when I create a new object that has a relationship to the main_object. When the new object is created, if the user presses "Create new Backup", then a revision is successfully created for the main_object and all the related ones BUT the previous revisions show this message on the admin panel: "Model instances without primary key value are unhashable".

    The traceback that appears is:

    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
      132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
      110.                     response = view_func(request, *args, **kwargs)
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
      57.         response = view_func(request, *args, **kwargs)
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
      233.             return view(request, *args, **kwargs)
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/reversion/admin.py" in revision_view
      238.             context,
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/reversion/admin.py" in _reversion_revisionform_view
      184.                 version.revision.revert(delete=True)
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/reversion/models.py" in revert
      89.                         if item not in old_revision:
    File "/Users/platico/PycharmProjects/news-service/src/lib/python2.7/site-packages/django/db/models/base.py" in __hash__
      521.             raise TypeError("Model instances without primary key value are unhashable")
    
    

    with an Exception Type of TypeError and an Exception Value of Model instances without primary key value are unhashable

    opened by kplatis 18
  • Using fixtures to initialise versioned inline data

    Using fixtures to initialise versioned inline data

    Hey, apologies if this is a known thing, but I've been unable to find an answer in the docco.

    I'm trying to use fixtures to initialize some standing data for a Django Admin based application. Having loaded the fixtures, I call createinitialrevisions to initialize Reversion. The problem I'm having is that inline objects are being initialized with separate revision_ids to their parents in the reversion_version table (these are simple value objects, rather than being first class entities, and have no lifecycle outside their containing parent). I guess this makes sense as Reversion does not know which objects need to be versioned together. This means that if I amend or delete these parent objects, their dependent inline objects are not tied to the parents correctly, and cannot be reverted or recovered with them.

    If I use the Admin GUI the relationship between the parents and inline objects is known, and Reversion can group the changes together correctly. However, for the initial bulk loading of data this isn't a practical approach.

    Is there some way to tie data loaded through fixtures together so that Reversion knows what is going on when createinitialrevisions is called? If not, is there a recommended way to programmatically initialize related standing data in a Reversion friendly way?

    Thanks for any pointers.

    opened by nybl 3
  • Add step to show version data and allow for confirmation prior to to reversion

    Add step to show version data and allow for confirmation prior to to reversion

    When reversion has been configured for the admin, the history view of an object shows the following: image

    The issue is that clicking on any of the linked versions immediately results in an attempt at reverting to that version. Regardless of any wording placed around the links, the linked pages are retrieved using HTTP GET and result in an "unsafe" operation, resulting in a violation of the HTTP spec:

    If the purpose of such a resource is to perform an unsafe action, then the resource owner MUST disable or disallow that action when it is accessed using a safe request method.

    Note use of the word MUST in the wording above (emphasis mine) - this is an absolute requirement and a strict violation of expected web semantics.

    The fix seems relatively easy. Show an intermediary page (like Django does when deleting an object), asking the user to confirm their action which should then POST a request that performs the reversion returning a HTTP 301 response the Location header set to either the object history or change page.

    opened by tysonclugg 4
  • Introduce default format setting.

    Introduce default format setting.

    Good evening,

    The reason I'm interested in this pull request to be landed:

    We frequently use model field from third-party library which can't be handled by core Django serializers.

    I wrote custom serializer, not big deal. But now I need to mention custom format name in every call to register decorator.

    Would be nice to set it once and forget about it :smile:

    Best regards, Josiah.

    opened by proofit404 6
  • Explain how to create revisions with bulk actions

    Explain how to create revisions with bulk actions

    The documentation notes:

    Bulk actions, such as Queryset.update(), do not send signals, so won’t be noticed by django-reversion.

    It would be helpful to expand that infobox with how people can work around that if desired and generate the versions anyway. In particular, I think looping over the queryset and using add_to_revision should work. Of course it would be good include a performance caveat, especially if #924 isn't fixed first.

    Possible text:

    Bulk actions (such as Queryset.update(), Queryset.bulk_update, or Queryset.bulk_create()) do not send signals, so won’t be noticed by django-reversion. You can use add_to_revision with bulk_update or bulk_create as a workaround, but this may eliminate the performance advantage of doing bulk actions since this requires fetching the objects into memory (unlike update()) and reversion will do one query per new version object (#924).

    opened by dehnert 1
  • Re-add support for `bulk_create`

    Re-add support for `bulk_create`

    Between 1.8.0 and 1.8.6 (#380), reversion used bulk_create when creating versions, which presumably dramatically improved performance when creating a revision with many changed model instances[1]. It sounds like the motivation for removing this was inability to get back object primary keys from bulk_create, but that has since been fixed on some popular databases -- Django 1.10 (released about a year and a half after #380) added some support (only PostgreSQL at the time). SQLite was added in Django 4.0, and MariaDB was added sometime in the middle. It looks like there's a convenient feature test for this (connection.features.can_return_rows_from_bulk_insert), so it would be nice if django-reversion could use bulk_create when feasible.

    (I found #380 while trying to figure out why tons of queries were being used despite the changelog claiming reversion uses bulk_create, so if you don't re-add bulk_create support it might be nice to note the change somewhere?)

    [1] I haven't benchmarked this specifically, but a script that creates several thousand objects went from 30 minute runtime to ~3 minutes by doing far more query batching, so I suspect this is significant.

    opened by dehnert 2
Releases(v5.0.4)
Owner
Dave Hall
Experienced Python, Rust and Typescript developer. Equally comfortable in the cloud, or down to the metal on embedded hardware.
Dave Hall
An API was build with Django to store and retrieve information about various musical instruments.

The project is meant to be a starting point, an experimentation or a basic example of a way to develop an API with Django. It is an exercise on using Django and various python technologies and design

Kostas Ziovas 2 Dec 25, 2021
Pinax is an open-source platform built on the Django Web Framework.

Symposion Pinax Pinax is an open-source platform built on the Django Web Framework. It is an ecosystem of reusable Django apps, themes, and starter pr

Pinax Project 295 Mar 20, 2022
Rosetta is a Django application that eases the translation process of your Django projects

Rosetta Rosetta is a Django application that facilitates the translation process of your Django projects. Because it doesn't export any models, Rosett

Marco Bonetti 909 Dec 26, 2022
A prettier way to see Django requests while developing

A prettier way to see Django requests while developing

Adam Hill 35 Dec 02, 2022
Developer-friendly asynchrony for Django

Django Channels Channels augments Django to bring WebSocket, long-poll HTTP, task offloading and other async support to your code, using familiar Djan

Django 5.5k Jan 06, 2023
An orgizational tool to keep track of tasks/projects and the time spent on them.

Django-Task-Manager Task Tracker using Python Django About The Project This project is an orgizational tool to keep track of tasks/projects and the ti

Nick Newton 1 Dec 21, 2021
Full control of form rendering in the templates.

django-floppyforms Full control of form rendering in the templates. Authors: Gregor Müllegger and many many contributors Original creator: Bruno Renié

Jazzband 811 Dec 01, 2022
Django application and library for importing and exporting data with admin integration.

django-import-export django-import-export is a Django application and library for importing and exporting data with included admin integration. Featur

2.6k Dec 26, 2022
Full-featured django project start tool.

django-start-tool Introduction django-start-tool is a full-featured replacement for django-admin startproject which provides cli for creating the same

Georgy Gnezdilov 0 Aug 30, 2022
A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a unique id.

Django-URL-Shortener A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a uni

Rohini Rao 3 Aug 08, 2021
Docker django app

Hmmmmm... What I should write here? Maybe "Hello World". Hello World Build Docker compose: sudo docker-compose build Run Docker compose: sudo docker-

Andrew 0 Nov 10, 2022
Django Pickled Model

Django Pickled Model Django pickled model provides you a model with dynamic data types. a field can store any value in any type. You can store Integer

Amir 3 Sep 14, 2022
Utilities to make function-based views cleaner, more efficient, and better tasting.

django-fbv Utilities to make Django function-based views cleaner, more efficient, and better tasting. 💥 📖 Complete documentation: https://django-fbv

Adam Hill 49 Dec 30, 2022
A pluggable Django application for integrating PayPal Payments Standard or Payments Pro

Django PayPal Django PayPal is a pluggable application that integrates with PayPal Payments Standard and Payments Pro. See https://django-paypal.readt

Luke Plant 672 Dec 22, 2022
Forward and backwards compatibility layer for Django 1.4, 1.7, 1.8, 1.9, 1.10, and 1.11

django-compat Forward and backwards compatibility layer for Django 1.4 , 1.7 , 1.8, 1.9, 1.10 and 1.11 Consider django-compat as an experiment based o

arteria GmbH 106 Mar 28, 2022
💨 Fast, Async-ready, Openapi, type hints based framework for building APIs

Fast to learn, fast to code, fast to run Django Ninja - Fast Django REST Framework Django Ninja is a web framework for building APIs with Django and P

Vitaliy Kucheryaviy 3.8k Jan 01, 2023
APIs for a Chat app. Written with Django Rest framework and Django channels.

ChatAPI APIs for a Chat app. Written with Django Rest framework and Django channels. The documentation for the http end points can be found here This

Victor Aderibigbe 18 Sep 09, 2022
MAC address Model Field & Form Field for Django apps

django-macaddress MAC Address model and form fields for Django We use netaddr to parse and validate the MAC address. The tests aren't complete yet. Pa

49 Sep 04, 2022
Get inside your stronghold and make all your Django views default login_required

Stronghold Get inside your stronghold and make all your Django views default login_required Stronghold is a very small and easy to use django app that

Mike Grouchy 384 Nov 23, 2022
Redia Cache implementation in django.

django-redis Recipe APP Simple Recipe app which shows different kinds off recipe to the user. Why Cache ? Accessing data from cache is much faster tha

Avinash Alanjkar 1 Sep 21, 2022