Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2014 17:52:00

ZaEzzz
Зарегистрирован: 2013-11-13
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

История действий над моделью

Всем доброго времени суток!

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

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

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

Какие еще могут быть предложения?

Отредактировано ZaEzzz (Ноя. 1, 2014 17:52:15)

Офлайн

#2 Ноя. 2, 2014 08:36:55

Tiendil
Зарегистрирован: 2014-09-23
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

История действий над моделью

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

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

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

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

Вариант 3 — нагуглить уже готовое приложение.



разработчик MMOZPG «Сказка» — http://the-tale.org

Отредактировано Tiendil (Ноя. 2, 2014 08:52:17)

Офлайн

#3 Ноя. 3, 2014 15:07:11

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

История действий над моделью

Посмотри как это сделано в админке джанги https://github.com/django/django/blob/master/django/contrib/admin/models.py#L27 , может устроит

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version