Найти - Пользователи
Полная версия: История действий над моделью
Начало » Django » История действий над моделью
1
ZaEzzz
Всем доброго времени суток!

Нужно писать в БД историю изменений объектов модели и связанных с ними. Требуется для того, чтобы смотреть полную историю кто и что делал с моделью.

Абстрактный пример - есть форум и история действий, связанных с топиком:
1 - создан топик, автор такой-то, время
2 - Добавлен комментарий к топику, автор, время
3 - Топик изменен, автор, время
4 - Добавлен такой-то файл, автор, время
5 - Топик закрыт, автор, время.

Вижу пока два выхода:
1 - Переопределить save(), но я не знаю, как в этом случае получить автора.
2 - Ручками во всех местах писать историю, но это как-то неправильно.

Какие еще могут быть предложения?
Tiendil
ZaEzzz
Переопределить save(), но я не знаю, как в этом случае получить автора.
В этом случае проблема будет не только с определением инициатора действия, но и с определением конкретного типа действия, т.к. по изменению данные его не всегда легко восстановить. Угадывание — это плохой подход.

UPDATED: ещё это не поможет при создании и удалении объектов, массовом изменении и удалении. Более того, нет гарантии, что через год в частном случае не понадобится делать операции в обход модели и orm.

ZaEzzz
2 - Ручками во всех местах писать историю, но это как-то неправильно.
Правильно отделить логику от представления и в каждой конкретной логической операции создавать конкретную запись в логе, так как только в месте проведения этой операции будет присутствовать вся необходимая информация (а также маркер успешности самого изменения).

Дополнительно, в логике, вместо прямой записи в лог, можно дёргать сигналы (https://docs.djangoproject.com/en/dev/topics/signals/), а лог уже вешать как один из обработчиков.

Вариант 3 — нагуглить уже готовое приложение.
slav0nic
Посмотри как это сделано в админке джанги https://github.com/django/django/blob/master/django/contrib/admin/models.py#L27 , может устроит
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB