django-safedelete-E2E 0.3.6
Mask your objects instead of deleting them from your database.
License: BSD
Keywords: django,delete,safedelete,softdelete

Django safedelete
=================

.. image:: https://travis-ci.org/makinacorpus/django-safedelete.png
    :target: https://travis-ci.org/makinacorpus/django-safedelete

.. image:: https://coveralls.io/repos/makinacorpus/django-safedelete/badge.png
    :target: https://coveralls.io/r/makinacorpus/django-safedelete


What is it ?
------------

For various reasons, you may want to avoid deleting objects from your database.

This Django application provides a model mixin, that allows you to transparently retrieve or delete your objects,
without having them deleted from your database.

You can choose what happens when you delete an object :
 - it can be masked from your database (soft delete)
 - it can be normally deleted (hard delete)
 - it can be hard-deleted, but if its deletion would delete other objects, it will only be masked
 - it can be never deleted or masked from your database (no delete, use with caution)


Example
-------

.. code-block:: python

    # Models

    # We create a new mixin, with the given policy : Objects will be hard-deleted, or soft deleted if other objects would have been deleted too.
    SafeDeleteMixin = safedelete_mixin_factory(HARD_DELETE_NOCASCADE)

    class Article(SafeDeleteMixin):
        name = models.CharField(max_length=100)

    class Order(SafeDeleteMixin):
        name = models.CharField(max_length=100)
        articles = models.ManyToManyField(Article)


    # Example of use

    >>> article1 = Article(name='article1')
    >>> article1.save()

    >>> article2 = Article(name='article2')
    >>> article2.save()

    >>> order = Order(name='order')
    >>> order.save()
    >>> order.articles.add(article1)

    # This article will be masked, but not deleted from the database as it is still referenced in an order.
    >>> article1.delete()

    # This article will be deleted from the database.
    >>> article2.delete()


Compatibilities
---------------

* Branch 0.2.x is compatible with django >= 1.2
* Branch 0.3.x is compatible with django >= 1.4

Current branch (0.3.x) has been tested with :

*  Django 1.4, using python 2.6 and 2.7.
*  Django 1.5 and 1.6, using python 2.6, 2.7 and 3.x.
*  Django 1.7 using python 2.7 and python 3.x.
*  Django 1.8 using python 2.7 and python 3.x.
*  Django 1.9 using python 2.7 and python 3.x.



Installation
------------

Installing from pypi (using pip). ::

    pip install django-safedelete


Installing from github. ::

    pip install -e git://github.com/makinacorpus/django-safedelete.git#egg=django-safedelete


The application doesn't have any special requirement.


Documentation
-------------

The documentation is available `here <https://django-safedelete.readthedocs.io>`_.


Licensing
---------

Please see the LICENSE file.

Contacts
--------

Please see the AUTHORS file.

.. image:: https://drupal.org/files/imagecache/grid-3/Logo_slogan_300dpi.png
    :target: http://www.makina-corpus.com



=========
CHANGELOG
=========

0.3.6 (unreleased)
==================

** New **

- Add suport a Model superclass to use custom django models
- Add an ability to set 'db_index' and 'verbose_name' for the 'deleted' field

0.3.5
=====

** New **

- Change ``DELETED_VISIBLE_BY_PK`` to ``DELETED_VISIBLE_BY_FIELD`` to be able to change the field used.

0.3.4
=====

** New **

- Add a ``SOFT_DELETE_CASCADE`` policy which perform a SOFT_DELETE on safedelete related objects 
- Django 1.8 compatibility

0.3.3
=====

- Prevent XSS in admin

0.3.2
=====

- Prevent migration errors on django 1.8 by declaring the SafeDeleteManager (internal class in managers) as global

0.3.1
=====

- Fix issue with release on pypi not being the good one


0.3.0
=====

** New **

- Add a ``NO_DELETE`` policy which never soft or hard deletes an instance
- Django 1.8 compatibility

** Removed **

- Support of Django 1.2 and Django 1.3 has been removed

** Bugfixes **

- ``all_with_deleted`` method doesn't lose current queryset on a related manager
- uniqueness is now checked against soft deleted instances too
- prefetch_related() now works with SafedeleteQuerySet
- Fix the undelete action in the administration for active objects.


0.2.1 (2014-12-15)
==================

** New **

- Extends Django compatibility to Django 1.2


0.2.0 (2014-12-09)
==================

** New **

- Django compatilibty 1.3 => 1.7
- Add administration utilities