FishHook
Dr.Livsi
Добрый день!
Есть система, в которой есть несколько десятков пользователей.
Эти несколько десятков пользователей редактируют одну модель, которая содержит несколько десятков тысяч строк.
Модель:
name1=CharField()
name2=CharField()
name1cat=ForeignKey(cat1)
name2cat=ForeignKey(cat2)
Нужна система, которая бы отслеживала какие пользователи какие именно корректировки внесли в модель (значения до внесения корректировок, значения после внесения, время корректировок).
Не хочется изобретать велосипед, поэтому хотелось бы спросить: существуют ли уже какие-то готовые системы, приложения для реализации данной задачи?
Велосипед получится совсем не сложный. Переопредели save у модели или повешай обработчик на сигнал pre_save или post_save.
Да, в принципе, я к этому и пришел было. Но возникло несколько моментов. Если переопределять save - там возникает проблема с передачей userа, который этот save делает (собственно, если кто подскажет - буду благодарен -в будущем пригодится). Далее если делать через сигналы - там тоже не понятно, как в функцию обработчик добавлять информацию о юзере, который делает сохранение. Кроме того, вероятность того, что несколько user-ов будут корректировать один и тот же экземпляр модели очень высока а здесь уже лучше использовать update - а он не вызывает сигнал pre_save или post_save.
собственно, модель, фиксирующая изменения модели, указанной выше выглядит следующим образом:
model Stat(models.Model):
udate=...
user=ForeignKey(User)
name1cat_before=ForeignKey(Модель)
name2cat_before=ForeignKey(Модель)
name1cat_after=ForeignKey(Модель)
name2cat_after=ForeignKey(Модель)
Пока пришел к row sql:
сохранять данные буду в модель “Модель” (если текущие данные отличаются от того, что собираюсь добавить - если отличаются - то перед обновлением забрасываем статистические данные в Stat, а далее обновляем). Делается все в одну транзакцию, что бы заблокировать возможные конкурентные обновления.