https://github.com/ildus/django-history
Full history for django models
https://github.com/ildus/django-history
Last synced: 3 months ago
JSON representation
Full history for django models
- Host: GitHub
- URL: https://github.com/ildus/django-history
- Owner: ildus
- Created: 2011-09-10T11:23:01.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2015-04-06T18:32:30.000Z (almost 11 years ago)
- Last Synced: 2025-06-29T01:58:48.523Z (7 months ago)
- Language: Python
- Homepage:
- Size: 129 KB
- Stars: 19
- Watchers: 2
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
Общее описание
--------------
Приложение для сохранения истории изменений
объектов. Технику взял из книги [Pro Django (автор Marty Alchin)][1].
Приложение умеет:
1. сохранять все изменения объекта
2. откатывать изменения
3. просто включается, не требует создания вручную моделей для сохранения истории, при этом история изменений хранится в разных таблицах для каждой модели
Можно установить с помощью pip:
pip install -e git+git://github.com/ildus/django-history.git#egg=django-history
Установка:
----------
* добавляем в мидлвары `django_history.current_context.CurrentUserMiddleware`
* в модели, для которого нужно сохранять историю, добавляем
from django_history.models import HistoricalRecords
history = HistoricalRecords()
* выполнить syncdb
Middleware нужен, для того чтобы сохранить какой пользователь сделал
изменения.
Использование:
--------------
Можно получить историю всех изменений в модели или объекте модели. Например,
так
>>> from main.models import Poll
>>> Poll.objects.create(language = 'en',question = 'Where are we?')
>>> poll = Poll.objects.all()[0]
>>> poll.language = 'ru'
>>> poll.save()
>>> poll.history.all()
[, ]
При авторизованном пользователе, будет видно кто изменил объект.
Можно откатывать изменения. Нужно учесть, что откат тоже является изменением и
тоже идет в историю
>>> poll.history.all()[0].revert()
>>> poll.history.all()
[, ]
Можно получать историю не только по объекту, но и по всей модели
>>> poll2 = Poll.objects.create(language = 'cz',question = 'Who are we?')
>>> poll2.language = 'cs'
>>> poll2.save()
>>> Poll.history.all()
[, , , , ]
Вот и все! Детали реализации лучше смотреть прямо в коде, благо его там не так
много. А если коротко, то все реализовано через сигналы и метода
contribute_to_class, который отрабатывает для полей модели.
[1]: http://prodjango.com/