Metadata-Version: 2.1
Name: django-model-tracker
Version: 2.0
Summary: Track Django Model Objects over time
Home-page: https://github.com/mkalioby/ModelTracker/
Download-URL: https://github.com/mkalioby/ModelTracker/
Author: Mohamed El-Kalioby
Author-email: mkalioby@mkalioby.com
License: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 1.7
Classifier: Framework :: Django :: 1.8
Classifier: Framework :: Django :: 1.9
Classifier: Framework :: Django :: 1.10
Classifier: Framework :: Django :: 1.11
Classifier: Framework :: Django :: 2.0
Classifier: Framework :: Django :: 2.1
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.0
Classifier: Framework :: Django :: 3.1
Classifier: Framework :: Django :: 3.2
Classifier: Framework :: Django :: 4.0
Classifier: Framework :: Django :: 4.1
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
Description-Content-Type: text/markdown
License-File: LICENSE

# django-model-tracker

Track model object changes over time so that you know who done what.

[![PyPI version](https://badge.fury.io/py/django-model-tracker.svg)](https://badge.fury.io/py/django-model-tracker)
[![Downloads](https://pepy.tech/badge/django-model-tracker)](https://pepy.tech/project/django-model-tracker)
 
## Installation

* Install the package
    * For Django<4.0
       ```sh
        pip install 'django-model-tracker jsonfield'
      ```
    * For Django>=4.0
      ```sh
       pip install 'django-model-tracker'
      ```

* Add Application to your project's INSTALLED_APPs
```python
INSTALLED_APPS = (
     '....',
    'ModelTracker',
    )
```    
* Add the following line to your urls.py
```python
import ModelTracker
urlpatterns = patterns('',
...
url(r'^track/', include('ModelTracker.urls')),
...
)
```
* Run Migrations
```sh
   python manage.py migrate ModelTracker 
```

* Add the following line to your models.py file
```python
from ModelTracker import Tracker
```
*  Convert each Model you want to track to inhert from `Tracker.ModelTracker` instead of `models.Model`
   
**Old Code**

```python
   class Employee(models.Model):
     name=models.CharField(max_length=255)
     address=models.CharField(max_length=255)
     age=models.IntegerField()
 ``` 
  **New Code**
 
   ```python
    class Employee(Tracker.ModelTracker):
      name=models.CharField(max_length=255)
      address=models.CharField(max_length=255)
      age=models.IntegerField()
```
* For each save() call, add the user the username
    * Old Code
 ```python
    emp=Employee()
    emp.save()
 ``` 
 
     * New Code
 ```python
        emp=Employee()
        emp.save(request.user.username)
 ```
* Starting from version of 0.5, you can pass a event_name parameter to mark change as an event
 
     * New Code
 ```python
        emp=Employee()
        emp.save(request.user.username,event_name="Created the user")
 ```

# Using The Middleware

You can add `ModelTracker.middleware.ModelTrackerMiddleware` to your Middleware classes to get the username automatically from the request.

```python
MIDDLEWARE_CLASSES = (
     '....',
    'ModelTracker.middleware.ModelTrackerMiddleware',
    )
```   

**Note:** If you pass username as `None` then the change won't be saved.

# Showing Record History

There are 3 ways to see the history of a record
 1. go to `ModelTracker` url and select `Table` and enter `id`.
 2. call `showModelChanges` by POST and send `csrftokenmiddleware` to return history as html.
 3. call `getModelChanges` which returns history as Json.

# Django Admin

There is 2 ways to update an object by django admin
1. Handle save and delete in ModelAdmin as follows
   ```python
   def save_model(self, request, obj, form, change):
        obj.save(request.user.username,"Editing From admin interface")

   def delete_model(self, request, obj):
        obj.delete(username=request.user.username, event_name="Deleting From admin interface")
   ```
2. Inhert from TrackerAdmin rather ModelAdmin
   ```python
   from ModelTracker.Tracker import TrackerAdmin 
   admin.site.register(employee, TrackerAdmin)
``` 
